2025년 12월 5일 발생한 Cloudflare 네트워크 장애의 원인, 영향, 기술적 세부 사항과 재발 방지 대책을 정리한 사고 보고서
2025-12-05
읽는 데 5분

2025년 12월 5일 08:47 UTC(이 글의 모든 시간은 UTC 기준)부터 Cloudflare 네트워크의 일부 구간에서 심각한 장애가 발생하기 시작했습니다. 09:12에 모든 서비스가 완전히 복구되면서 사건은 종료되었고, 전체 영향 시간은 약 25분이었습니다.
전체 Cloudflare HTTP 트래픽 중 약 28%에 해당하는 일부 고객이 영향을 받았습니다. 아래에서 설명하듯, 개별 고객이 영향을 받으려면 여러 조건이 동시에 충족되어야 했습니다.
이 문제는 Cloudflare 시스템에 대한 사이버 공격이나 그 어떤 형태의 악의적 활동로 인해 직접적으로나 간접적으로 발생한 것이 아닙니다. 대신, React Server Components에서 이번 주 공개된 업계 전반의 취약점(관련 공지)을 탐지·완화하는 과정에서, HTTP 본문 파싱 로직을 변경하던 중 촉발되었습니다.
당사의 시스템에서 발생하는 어떤 형태의 장애도 용납될 수 없으며, 특히 11월 18일 사건에 이어 또다시 인터넷에 피해를 끼쳤다는 점을 무겁게 받아들이고 있습니다. 이러한 유형의 사고가 다시는 발생하지 않도록 어떤 작업을 하고 있는지에 대해, 다음 주에 자세한 내용을 별도로 공개할 예정입니다.
아래 그래프는 장애 시간 동안 네트워크에서 발생한 HTTP 500 오류(아래쪽의 빨간 선)를, 영향을 받지 않은 전체 Cloudflare 트래픽(위쪽의 초록색 선)과 비교해 보여줍니다.

Cloudflare의 웹 애플리케이션 방화벽(WAF)은 악성 페이로드를 탐지·차단하여 고객을 보호합니다. 이를 위해 Cloudflare 프록시는 분석 목적상 HTTP 요청 본문(body) 내용을 메모리에 버퍼링합니다. 오늘 이전까지 이 버퍼 크기는 128KB로 설정되어 있었습니다.
React 사용 고객을 심각한 취약점 CVE-2025-55182로부터 보호하기 위한 지속적인 노력의 일환으로, 더 많은 고객을 보호할 수 있도록 버퍼 크기를 Next.js 애플리케이션의 기본 제한값인 1MB로 상향하는 작업을 롤아웃하기 시작했습니다.
첫 번째 변경 사항은 점진적 배포 시스템을 사용해 롤아웃하고 있었습니다. 롤아웃 과정에서, 내부 WAF 테스트 도구가 확대된 버퍼 크기를 지원하지 않는다는 점을 발견했습니다. 이 내부 테스트 도구는 당시 실제 고객 트래픽에는 사용되지 않았고 영향을 주지도 않았기 때문에, 이를 비활성화하는 두 번째 변경을 진행했습니다.
이 WAF 테스트 도구를 끄는 두 번째 변경은 글로벌 구성(configuration) 시스템을 통해 적용되었습니다. 이 시스템은 점진적 롤아웃을 수행하지 않고, 수 초 이내에 네트워크 전역의 모든 서버로 변경 사항을 전파합니다. 이 시스템은 2025년 11월 18일에 발생한 장애 이후 현재 재검토 중입니다.
불행하게도, 특정 조건에서 FL1 버전 프록시에서 WAF 규칙 테스트 도구를 끄는 이 두 번째 변경이 오류 상태를 유발했고, 그 결과 네트워크에서 HTTP 500 오류 코드가 응답되었습니다.
변경 사항이 네트워크 전체에 전파되자마자, FL1 프록시의 코드 실행은 규칙 모듈의 버그에 도달했고, 다음과 같은 Lua 예외가 발생했습니다.
[lua] Failed to run module rulesets callback late_routing: /usr/local/nginx-fl/lua/modules/init.lua:314: attempt to index field 'execute' (a nil value)
그 결과 HTTP 500 응답 코드가 발행되었습니다.
문제는 변경 사항이 적용된 직후 곧바로 인지되었고, 09:12에 롤백을 수행했습니다. 이후 모든 트래픽은 정상적으로 처리되었습니다.
레거시 FL1 프록시에서 웹 자산을 제공하고 있었으며 동시에 Cloudflare Managed Ruleset을 적용하고 있었던 고객이 영향을 받았습니다. 이 조건을 만족하는 웹사이트에 대한 모든 요청은 /cdn-cgi/trace와 같은 일부 테스트 엔드포인트를 제외하면 HTTP 500 오류를 반환했습니다.
위 구성 조건을 만족하지 않는 고객은 영향을 받지 않았습니다. 또한 중국 내 네트워크를 통해 제공되는 고객 트래픽 역시 영향을 받지 않았습니다.
Cloudflare의 ruleset 시스템은, 시스템에 들어오는 각 요청에 대해 평가되는 여러 규칙 집합으로 구성됩니다. 각 규칙은 특정 트래픽을 선택하는 필터와, 선택된 트래픽에 효과를 적용하는 액션으로 구성됩니다. 일반적인 액션은 "block"(차단), "log"(로그 기록), "skip"(건너뛰기) 등입니다. 또 다른 액션 유형으로 "execute"가 있으며, 이는 다른 ruleset의 평가를 트리거하는 데 사용됩니다.
내부 로깅 시스템은 이 기능을 활용하여, 고객에게 공개하기 전에 새로운 규칙을 평가합니다. 최상위 ruleset이 테스트 규칙이 포함된 또 다른 ruleset을 execute 액션으로 실행하는 구조입니다. 이번에 비활성화하려 했던 것이 바로 이 테스트 규칙들이었습니다.
ruleset 시스템에는 오작동하는 규칙을 빠르게 비활성화할 수 있도록 하는 킬스위치(killswitch) 서브시스템이 포함되어 있습니다. 이 킬스위치 시스템은 앞서 언급한 글로벌 구성 시스템으로부터 정보를 전달받습니다. 우리는 과거 여러 차례 사건을 완화하기 위해 이 킬스위치 시스템을 사용해 왔으며, 이에 대한 명확한 표준 운영 절차(SOP)가 존재하고, 이번 사건에서도 이를 따랐습니다.
그러나 액션이 "execute"인 규칙에 킬스위치를 적용한 것은 이번이 처음이었습니다. 킬스위치를 적용하자, 코드는 execute 액션의 평가를 올바르게 건너뛰었고, 그 액션이 가리키는 하위 ruleset 역시 평가하지 않았습니다. 하지만 ruleset 전체 평가 결과를 처리하는 과정에서 다음과 같은 오류가 발생했습니다.
luaif rule_result.action == "execute" then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end
이 코드는 ruleset의 action이 "execute"라면 rule_result.execute 객체가 존재할 것이라고 가정합니다. 그러나 해당 규칙이 킬스위치로 인해 건너뛰어졌기 때문에 rule_result.execute 객체는 존재하지 않았고, 존재하지 않는(nil) 값에서 필드를 조회하려다 Lua 오류가 발생했습니다.
이는 코드 상의 단순한 오류로, 수년간 발견되지 않은 채 존재해 왔습니다. 이런 유형의 오류는 강한 타입 시스템을 가진 언어에서는 방지될 수 있습니다. Rust로 작성된 새로운 FL2 프록시에서 이 코드를 대체한 구현에서는 이러한 오류가 발생하지 않았습니다.
우리는 불과 2주 전인 2025년 11월 18일에, 이와는 별개의 변경으로 인해 더 길었던 가용성 장애를 겪었습니다. 두 사건 모두, 고객의 보안 이슈를 완화하기 위해 진행된 배포가 전 네트워크로 전파되었고, 그 결과 거의 전 고객층에 걸친 오류로 이어졌다는 공통점을 갖습니다.
당사는 당시 사건 이후 수백 명의 고객과 직접 대화하며, 단일 업데이트가 이와 같은 광범위한 영향을 일으키지 못하도록 변경할 계획을 공유했습니다. 이러한 변경이 이미 완료되었다면, 오늘 발생한 사고의 영향 역시 크게 줄일 수 있었을 것이라고 보고 있습니다. 그러나 안타깝게도 아직 모든 배포가 완료되지는 않은 상태였습니다.
이 작업이 아직 완료되지 않았다는 점이 실망스러울 수 있다는 점을 잘 알고 있습니다. 그럼에도 이 일은 조직 전체의 최우선 과제로 남아 있습니다. 특히 아래에 요약한 프로젝트들은 이번과 같은 변경의 영향을 제한하는 데 도움을 줄 것입니다.
고도화된 롤아웃 및 버저닝(Enhanced Rollouts & Versioning): 엄격한 상태 검증(health validation)을 거치며 소프트웨어를 점진적으로 배포하는 것과 마찬가지로, 위협에 신속히 대응하기 위해 사용하는 데이터와 일반적인 구성 역시 동일한 안전장치와 폭발 반경(blast radius) 완화 기능을 갖춰야 합니다. 여기에는 상태 검증, 신속한 롤백 기능 등이 포함됩니다.
간소화된 비상(break glass) 기능(Streamlined break glass capabilities): 추가적인 유형의 장애가 발생하더라도 중요 작업을 수행할 수 있도록 보장합니다. 이는 내부 서비스뿐 아니라, 모든 Cloudflare 고객이 사용하는 Cloudflare 컨트롤 플레인과의 표준 상호작용 방식 전반에 적용됩니다.
"Fail-Open" 오류 처리("Fail-Open" Error Handling): 회복탄력성 강화를 위한 노력의 일환으로, 주요 데이터 플레인 컴포넌트 전반에서 잘못 적용된 hard-fail 로직을 교체하고 있습니다. 구성 파일이 손상되었거나 허용 범위를 벗어나는(예: 기능 상한을 초과하는) 경우, 요청을 드롭하는 대신 시스템이 오류를 기록하고, 검증된 정상 상태(known-good state)로 되돌리거나 점수화 없이 트래픽을 통과시키도록 할 예정입니다. 일부 서비스에서는 특정 시나리오에서 fail-open 또는 fail-closed 동작을 고객이 선택할 수 있도록 할 가능성이 큽니다. 또한 이를 지속적으로 강제하기 위한 구성 드리프트 방지 기능도 포함될 것입니다.
다음 주가 끝나기 전까지, 위에 언급한 내용을 포함해 현재 진행 중인 모든 회복탄력성(resiliency) 관련 프로젝트에 대한 상세한 정리본을 게시할 예정입니다. 그 작업이 완료될 때까지는 네트워크에 대한 모든 변경을 잠정 동결하고, 더 나은 완화 및 롤백 시스템을 갖춘 이후에 다시 변경을 재개할 계획입니다.
이러한 유형의 사건이, 그것도 짧은 기간에 연이어 발생하는 것은 우리와 같은 네트워크에 결코 용납될 수 없는 일입니다. Cloudflare 팀을 대표해, 다시 한 번 고객 여러분과 전체 인터넷에 끼친 영향과 불편에 대해 깊이 사과드립니다.
| 시간 (UTC) | 상태 | 설명 |
|---|---|---|
| 08:47 | INCIDENT 시작 | 구성 변경이 배포되어 네트워크에 전파 시작 |
| 08:48 | 전체 영향 시작 | 변경이 완전히 전파됨 |
| 08:50 | INCIDENT 선언 | 자동 알림 발생 |
| 09:11 | 변경 롤백 | 구성 변경 롤백 및 재전파 시작 |
| 09:12 | INCIDENT 종료 | 롤백이 완전히 전파되어 모든 트래픽 복구 |
Cloudflare의 커넥티비티 클라우드는 기업 전체 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효율적으로 구축할 수 있도록 돕고, 모든 웹사이트와 인터넷 애플리케이션을 가속하며, DDoS 공격을 방어하고, 해커의 침입을 차단하며, Zero Trust 여정을 지원합니다.
어떤 기기에서든 1.1.1.1에 접속해 인터넷을 더 빠르고 안전하게 만들어 주는 무료 앱을 바로 사용해 보세요.
Cloudflare가 더 나은 인터넷을 구축하는 데 어떻게 기여하고 있는지 알고 싶다면 이곳에서 시작해 보세요. 새로운 커리어 방향을 찾고 있다면 채용 공고도 확인해 보시기 바랍니다.
2025년 11월 18일 12:00 AM
2025년 11월 18일 Cloudflare 장애 보고서 -------------------------------------- Cloudflare는 2025년 11월 18일 서비스 장애를 겪었습니다. 이 장애는 Bot Management 기능 파일 생성 로직의 버그로 인해 촉발되었고, 이로 인해 많은 Cloudflare 서비스가 영향을 받았습니다. ...
By
2025년 11월 18일 12:00 AM
2025년 11월 18일 Cloudflare 장애 보고서 -------------------------------------- Cloudflare는 2025년 11월 18일 서비스 장애를 겪었습니다. 이 장애는 Bot Management 기능 파일 생성 로직의 버그로 인해 촉발되었고, 이로 인해 많은 Cloudflare 서비스가 영향을 받았습니다. ...
By
2025년 10월 28일 12:00 PM
온라인 장애: 2025년 3분기 인터넷 중단 요약 --------------------------------------------------- 2025년 3분기 동안, 전 세계에서 정부 주도 셧다운, 정전, 케이블 절단, 사이버 공격, 지진, 화재, 기타 기술적 문제와 원인이 밝혀지지 않은 여러 사건으로 인해 다양한 인터넷 중단이 발생하는 것을 관찰했습니다. ...
By
2025년 9월 30일 10:05 AM
아프가니스탄 전국 인터넷 셧다운과 그 이전의 국지적 장애 확대 ------------------------------------------------------------------------- 2025년 9월 29일, 아프가니스탄 전역에서 인터넷 연결이 완전히 차단되어, 비즈니스, 교육, 금융, 정부 서비스를 포함한 광범위한 영역에 영향을 끼쳤습니다. ...
By