{"id":"IL-0404","org":"PortSwigger","date":"2024-10-24","docs":["https://github.com/bottlerocket-os/bottlerocket-core-kit/pull/158","https://github.com/bottlerocket-os/bottlerocket/releases/tag/v1.26.0","https://github.com/bottlerocket-os/bottlerocket/issues/4260","https://github.com/bottlerocket-os/bottlerocket/issues/4253","https://github.com/bottlerocket-os/bottlerocket/releases/tag/v1.25.0","https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html"],"title":{"en":"All BSEE SaaS customer pods on EKS crash-looped after Karpenter moved nodes to Bottlerocket v1.26.0, which broke Java","ko":"Karpenter 가 운영 EKS 노드를 Bottlerocket v1.26.0 으로 바꾼 뒤 BSEE SaaS 고객 인스턴스의 파드가 모두 crash loop back off 에 빠졌다"},"domain":["kubernetes","aws"],"impact":{"scope":"Every BSEE SaaS customer instance was unavailable and showed the Environment Unavailable message; one support case was raised and no customer data was lost","users":"all BSEE SaaS customers","region":"eu-west-1"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://github.com/portswigger-cloud/postmortems/blob/main/2024/10/saas-outage.md","kind":"github","archived":null}],"summary":{"en":"Bottlerocket PR-158, merged on 16 October 2024, added a default security setting that blocks writable and executable memory for all services, `MemoryDenyWriteExecute=yes`, and Bottlerocket v1.26.0, released on 24 October at 02:00, included it. The systemd documentation for this option says it is incompatible with programs that generate code at runtime, including JIT execution engines, so on v1.26.0 applications that rely on JIT compilation, such as Java, could not run. PortSwigger's Karpenter resources used the latest released Bottlerocket AMI, so once AWS published v1.26.0 in eu-west-1, Karpenter rolled the production EKS nodes onto it and every BSEE SaaS customer instance failed.\n\nThe team was told of the outage by other teams at 08:07 and 08:15, found the crash-looping pods and the JVM error, saw that the nodes had been updated at 05:33 to v1.26.0, and found the matching Bottlerocket issue. The team reverted all EC2 instances in the SaaS production account to Bottlerocket v1.25.0, deployed v1.25.0 across all EKS clusters and rolled out new nodes, and customer instances came back from 09:15. The incident lasted 3h 45m, affected all customers, raised one support case and lost no customer data.","ko":"2024년 10월 16일 Bottlerocket 저장소의 기본 브랜치에 PR-158 이 머지됐다. 이 변경은 모든 서비스에 기본 보안 설정 MemoryDenyWriteExecute=yes 를 넣었다. 이 설정은 쓰기와 실행이 함께 가능한 메모리를 막는다. 10월 24일 02:00 에 이 PR 을 담은 v1.26.0 이 나왔고, AWS 는 02:00 부터 04:30 사이 eu-west-1 에서 v1.26.0 을 최신 Bottlerocket AMI 로 내놓았다. 04:00 에 Karpenter 가 새 버전을 알아채고 운영 EKS 클러스터의 EC2 노드 갱신을 시작했다. 이 설정 때문에 Java 처럼 JIT 컴파일에 기대는 애플리케이션이 실행되지 못했다. systemd 문서도 이 옵션이 JIT 실행 엔진처럼 실행 중에 코드를 만드는 프로그램과 맞지 않는다고 분명히 적고 있다.\n\n04:45 에 SaaS 가용률 지표가 크게 떨어졌지만, 기술팀이 장애를 안 것은 08:07 Growth 팀의 채널 메시지와 08:15 Product 팀원의 구두 알림 뒤였다. 기술팀은 파드 로그의 오류를 보고 OS 문제를 의심했다. EC2 노드가 05:33 에 갱신됐고 OS 가 v1.26.0 이라는 것을 확인한 뒤, Bottlerocket 저장소에서 Issue 4260 을 찾았다. 기술팀은 SaaS 운영 계정의 EC2 인스턴스를 모두 v1.25.0 으로 되돌리기 시작했고, 09:15 에 고객 인스턴스가 다시 올라왔다. 모든 고객이 3시간 45분 동안 영향을 받았고, 지원 문의는 1건이었으며 고객 데이터 손실은 없었다."},"trigger":{"en":"AWS made Bottlerocket v1.26.0 the latest Bottlerocket AMI in eu-west-1 between 02:00 and 04:30, and at 04:00 Karpenter saw the new version and started replacing the EC2 nodes of the production EKS cluster with it.","ko":"2024년 10월 24일 eu-west-1 에 Bottlerocket v1.26.0 이 최신 AMI 로 나오자, Karpenter 가 이를 알아채고 04:00 부터 운영 EKS 클러스터의 EC2 노드를 새 버전으로 바꾸기 시작했다."},"severity":"unknown","symptoms":["crash-loop","service-unavailable"],"timeline":{"detected_after":null,"resolved_after":"3h 45m"},"date_kind":"incident","detection":{"en":"The Growth team reported the outage in the BSEE cloud onboarding issues channel at 08:07, and a member of the Product team told the Technology Team verbally at 08:15. The SaaS Uptime Over Time metric had already dropped at 04:45.","ko":"04:45 에 SaaS Uptime Over Time 지표의 가용률이 크게 떨어졌다. 08:07 에 Growth 팀이 BSEE cloud onboarding issues 채널에 장애를 알렸고, 08:15 에 Product 팀원이 기술팀에 구두로 알렸다."},"components":["node-image","karpenter"],"root_cause":"upgrade-breaking-change","remediation":[{"text":{"en":"Reverted all EC2 instances in the SaaS production account to Bottlerocket v1.25.0","ko":"기술팀이 SaaS 운영 계정의 EC2 인스턴스를 모두 Bottlerocket v1.25.0 으로 되돌리기 시작했고, 09:15 에 고객 인스턴스가 다시 올라와 서비스가 복구됐다."}},{"text":{"en":"Deployed Bottlerocket 1.25.0 across all EKS clusters and rolled out new EKS nodes","ko":"모든 EKS 클러스터에 Bottlerocket 1.25.0 을 배포하고 새 EKS 노드로 교체했다."}}],"action_items":[{"text":{"en":"Change the Karpenter resources to deploy a specific versioned Bottlerocket AMI instead of the latest released AMI","ko":"Karpenter 리소스를 바꿔 최신 AMI 대신 버전을 고정한 Bottlerocket AMI 를 배포하게 했다. 이 방식은 기술팀의 유지 보수 부담을 늘리고 중요한 보안 패치 배포를 늦출 수 있다."}},{"text":{"en":"Add the Bottlerocket release ATOM feed to an internal tooling release dashboard","ko":"Bottlerocket 릴리스 ATOM 피드를 내부 도구 릴리스 대시보드에 넣었다."}},{"text":{"en":"Set up a public status page to communicate with customers","ko":"고객에게 투명하게 알리는 공개 상태 페이지를 만든다."}}],"contributing":["unpinned-version"],"recurrence_of":null,"symptoms_text":{"en":"On 24 October 2024 every BSEE SaaS customer instance showed the Environment Unavailable message, and the SaaS Uptime Over Time metric dropped sharply at 04:45. The Technology Team learned of the outage when the Growth team posted about it at 08:07 and a member of the Product team told the Technology Team verbally at 08:15.\n\nAll customer Kubernetes pods were in crash loop back off. The logs of the `init-enterprise-server-keystore` container, which runs `/usr/local/burpsuite_enterprise/bin/createKeystore`, showed `Error occurred during initialization of VM` followed by `Failed to mark memory page as executable - check if grsecurity/PaX is enabled`.\n\nThe error pointed the team at the operating system. The AWS EC2 console showed the EC2 nodes had been updated at 05:33 and the workloads had moved to the new nodes after that. The nodes ran Bottlerocket v1.26.0, and the Bottlerocket GitHub repository had Issue 4260 about compatibility problems of v1.26.0 with Java-based applications.","ko":"2024년 10월 24일 BSEE SaaS 고객 인스턴스가 모두 Environment Unavailable 메시지를 띄웠다. 04:45 에 SaaS Uptime Over Time 지표의 가용률이 크게 떨어졌고, 08:07 에 Growth 팀이 장애를 채널에 알렸다.\n\n고객의 Kubernetes 파드는 모두 crash loop back off 상태였다. 로그에는 keystore 를 만드는 createKeystore 명령 직후 \"Error occurred during initialization of VM\" 과 \"Failed to mark memory page as executable - check if grsecurity/PaX is enabled\" 가 찍혔고, init-enterprise-server-keystore 컨테이너의 스트림이 \"Stream closed EOF\" 로 닫혔다.\n\n기술팀은 오류 문구를 보고 OS 문제를 의심했다. AWS EC2 콘솔에서 EC2 노드가 05:33 에 갱신됐고 그 뒤 워크로드가 새 노드로 옮겨간 것을 확인했다. OS 버전이 v1.26.0 인 것을 보고 Bottlerocket GitHub 저장소를 찾아, Java 기반 애플리케이션을 v1.26.0 에서 돌릴 때의 호환성 문제를 다룬 Issue 4260 을 찾았다."},"updated_at":"2026-11-14T12:34:05.510393Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0404","org_slug":"portswigger"}