IL-0283 Cloudflare · 2025-11-18databasenetworking
Cloudflare 네트워크 전체에서 코어 프록시가 Bot Management 피처 파일을 읽다 실패해 사이트 방문자들이 HTTP 5xx 오류 페이지를 받았다
Cloudflare 의 코어 프록시는 요청마다 봇 점수를 매기는 Bot Management 모듈을 돌린다. 이 모듈의 머신러닝 모델은 피처 설정 파일을 입력으로 받는다. 이 파일은 몇 분마다 새로 만들어 네트워크 전체에 퍼뜨린다. 피처 파일은 ClickHouse 클러스터에서 5분마다 도는 쿼리가 만들었는데, 이 쿼리는 system.columns 에서 http_requests_features 테이블의 열을 고르면서 데이터베이스 이름으로 거르지 않았다. 2025년 11월 18일 11:05 UTC 에 Cloudflare 는 분산 쿼리를 공유 시스템 계정 대신 쿼리를 처음 낸 사용자 계정으로 돌리려는 작업의 하나로 권한 변경을 클러스터에 차례로 적용했다. 이 변경은 사용자들이 r0 데이터베이스의 하위 테이블 메타데이터도 볼 수 있게 권한을 명시했다. 그러자 쿼리 결과에 r0 의 열까지 섞여 피처 파일의 행이 두 배가 넘게 늘었다.
프록시는 성능을 위해 피처용 메모리를 미리 잡아 두었고, 피처 수 한도를 200 으로 정해 두었다. 실제로 쓰는 피처는 약 60 개였다. 200 개가 넘는 피처가 담긴 파일이 서버에 퍼지자 FL2 의 Rust 코드가 처리하지 않은 오류로 패닉을 냈고, 봇 모듈에 기대는 모든 트래픽이 HTTP 5xx 오류를 받았다. 옛 프록시 FL 에서는 오류 대신 모든 트래픽의 봇 점수가 0 이 됐다. 업데이트된 ClickHouse 노드에서 쿼리가 돌 때만 잘못된 파일이 나왔으므로 5분마다 좋은 파일과 나쁜 파일이 번갈아 퍼졌다. 네트워크가 회복과 실패를 되풀이하자 팀은 처음에 공격을 의심했다. 상태 페이지가 우연히 함께 내려간 것도 이 의심을 키웠다. 코어 프록시에 기대는 Workers KV 와 Access 도 장애를 겪었다. Turnstile 은 뜨지 않았고, Workers KV 와 Turnstile 을 쓰는 대시보드도 영향을 받았다.
13:05 에 Workers KV 와 Access 를 이전 버전 프록시로 우회시켜 영향을 줄였다. 팀은 Bot Management 설정 파일이 원인이라고 보고 14:24 에 새 파일의 생성과 배포를 멈췄으며, 알려진 정상 파일을 배포 큐에 손으로 넣고 코어 프록시를 강제로 재시작했다. 14:30 에 주된 영향이 풀렸다. 쌓인 로그인 시도로 느려진 대시보드는 15:30 무렵 컨트롤 플레인 동시성을 늘려 되살렸다. 나쁜 상태에 빠진 나머지 서비스들을 재시작해 17:06 에 모든 서비스가 정상으로 돌아왔다. Cloudflare 는 2019년 이후 가장 나쁜 장애였다고 밝혔다.
- 심각도
- –
- 영향 범위
- Core CDN and security services returned HTTP 5xx errors and the majority of core traffic stopped flowing; Turnstile, Workers KV, Access, dashboard login and parts of Email Security were also affected, and on the old FL proxy all traffic got a bot score of zero
- 영향 사용자
- Internet users visiting Cloudflare customers' sites and Cloudflare customers
- 지역
- Cloudflare's whole network
- 감지까지
- 3m
- 복구까지
- 5h 38m
증상
11:20 UTC 부터 Cloudflare 네트워크가 내보내는 HTTP 5xx 오류가 치솟았다. 고객 사이트를 찾은 인터넷 사용자들은 Cloudflare 네트워크 안에서 실패했다는 오류 페이지를 봤다.
오류는 한동안 줄었다가 다시 늘기를 되풀이했다. 내부 오류로는 아주 드문 모습이어서 팀은 처음에 초대형 DDoS 공격을 의심했다. 내부 장애 대응 채팅방에서는 최근 이어진 대규모 Aisuru DDoS 공격의 연장일 수 있다고 걱정했다. 결국 모든 ClickHouse 노드가 잘못된 파일을 만들게 되자 오르내림이 멈추고 실패 상태로 굳었다.
Cloudflare 인프라와 완전히 떨어져 호스팅되는 상태 페이지도 같은 시기에 내려가 오류 메시지를 띄웠다. 나중에 우연으로 밝혀졌지만, 일부 팀원은 공격자가 시스템과 상태 페이지를 함께 노린다고 믿게 됐다.
처음 눈에 띈 증상은 Workers KV 의 응답률 저하와 오류 증가였고, 다른 Cloudflare 서비스들이 그 영향을 받는 것처럼 보였다. 팀은 11:32 부터 13:05 까지 트래픽 조정과 계정 제한으로 Workers KV 를 정상 수준으로 되돌리려 했다.
새 프록시 엔진 FL2 를 쓰는 고객은 HTTP 5xx 오류를 받았다. 옛 엔진 FL 을 쓰는 고객은 오류는 받지 않았지만 모든 트래픽의 봇 점수가 0 으로 매겨져, 봇 차단 규칙을 둔 곳에서 오탐이 크게 늘었다. FL2 는 thread fl2_worker_thread panicked: called Result::unwrap() on an Err value 패닉을 내며 5xx 오류를 냈다.
Turnstile 이 뜨지 않아 활성 세션이 없는 사용자는 대시보드에 로그인하지 못했다. Access 는 대부분의 사용자에게 인증 실패 오류 페이지를 보였다. 디버깅 시스템과 관측 시스템이 잡히지 않은 오류에 디버깅 정보를 자동으로 덧붙이느라 CPU 를 많이 썼고, 그 때문에 CDN 응답 지연도 크게 늘었다.
원인
- 촉발
- 11:05 UTC 에 Cloudflare 는 ClickHouse 사용자들이 암묵적으로 갖고 있던 r0 데이터베이스 하위 테이블 접근 권한을 명시적으로 주는 변경을 배포했다. Bot Management 피처 파일을 만드는 쿼리는 데이터베이스 이름으로 거르지 않았고, 이 변경 뒤 쿼리 결과에 중복 행이 섞이기 시작했다.
감지
11:31 UTC 에 첫 자동 테스트가 문제를 감지했고, 11:32 에 수동 조사가 시작됐으며, 11:35 에 장애 대응 통화가 열렸다.
조치
- 13:05 UTC 에 Workers KV 와 Cloudflare Access 를 내부 우회 경로로 돌려 이전 버전의 코어 프록시를 쓰게 했다. 이전 버전에도 같은 문제가 있었지만 영향이 작았다.
- 14:24 UTC 에 새 Bot Management 설정 파일의 자동 배포를 멈췄다.
- 알려진 정상 피처 파일을 피처 파일 배포 큐에 손으로 넣었다.
- 코어 프록시를 강제로 재시작했다. 14:30 UTC 에 주된 영향이 풀렸다.
- 쌓인 로그인 시도와 재시도로 느려진 대시보드를 컨트롤 플레인 동시성을 늘려 15:30 UTC 무렵 되살렸다.
- 나쁜 상태에 빠진 나머지 서비스들을 재시작했고, 17:06 UTC 에 5xx 오류량이 평소로 돌아왔다.
후속 조치
- Cloudflare 가 직접 만든 설정 파일도 사용자 입력처럼 엄격하게 검증한 뒤 받아들인다.
- 기능을 네트워크 전체에서 끌 수 있는 킬 스위치를 더 늘린다.
- 코어 덤프나 다른 오류 보고가 시스템 자원을 다 써 버리지 못하게 한다.
- 모든 코어 프록시 모듈이 오류가 났을 때 어떻게 실패하는지 검토한다.
교훈
–
출처
관련 사례
IL-0574운영 환경의 DB 접속 경로를 Amazon RDS Proxy로 바꾼 지 몇 분 만에 Aurora MySQL writer CPU가 100%에 이르고 에러가 났다Safie · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0179DEBUG 로그가 쏟아지자 동기 로깅을 하던 요청 스레드들이 가득 찬 stdout 파이프에서 멈춘 채 DB 커넥션을 쥐고 있어, HikariCP 커넥션 풀이 고갈되고 요청이 30초 주기로 한꺼번에 실패했다.MUSINSA · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0512xPRO 의 쿠버네티스 APISIX 오리진 인증서가 갱신되지 못하고 만료되어 xpro.mit.edu 가 한 시간 동안 503 을 냈다MIT Open Learning · 2026 · sev1같은 원인 · 공통 CDN 과 엣지 네트워크
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0392데이터센터 전환을 앞두고 원형 복제를 설정하던 중 Wikimedia x1 섹션의 eqiad·codfw 사이 MariaDB 복제가 6분 멈췄다Wikimedia Foundation · 2024같은 원인 · 공통 데이터베이스
IL-0339Azure Front Door 와 Azure CDN 을 쓰는 Microsoft 서비스에 여러 리전에서 연결 오류, 타임아웃, 지연 급증이 났다Microsoft Azure · 2024같은 원인 · 공통 CDN 과 엣지 네트워크
IL-0367Central US 의 Azure Storage 가 VM 디스크 요청을 거부해 VM 과 그 위의 SQL Database, Cosmos DB 가 멈췄다Microsoft Azure · 2024같은 원인 · 공통 데이터베이스
IL-0511Vault 가 새로 발급한 데이터베이스 자격 증명이 SCRAM 으로 만들어져 pgbouncer 가 RDS 에 로그인하지 못하고 xPro 운영 사이트가 멈췄다MIT Open Learning · 2023같은 원인 · 공통 데이터베이스
같은 원인 · 공통 CDN 과 엣지 네트워크
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0283
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0283/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.