Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-71569 — CVE-2026-71569에 대한 실행 가능한 Docker 개념 증명으로, Apache Camel camel-a2a 웹훅 검증에서의 SSRF 가드 우회를 다루며, 프로브와 수정 검증을 포함합니다. | Kitploit
도구/GitHubGitHub/oscerd/cve-2026-71569
Vulnerability AnalysisExploitationWeb SecurityLearning & Education
GitHuboscerd/cve-2026-71569

CVE-2026-71569

CVE-2026-71569에 대한 실행 가능한 Docker 개념 증명으로, Apache Camel camel-a2a 웹훅 검증에서의 SSRF 가드 우회를 다루며, 프로브와 수정 검증을 포함합니다.

저장소 보기
4일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-71569 — camel-a2a: 웹훅 가드가 호스트 이름을 통해 도달한 IPv6 고유 로컬 주소를 허용함

WebhookUrlValidator가 푸시 알림 웹훅 호스트를 서로 일치하지 않는 두 곳에서 분류했던 Apache Camel 취약점에 대한 실행 가능한 개념 증명(PoC) 재현기:

  • IP 리터럴로 작성된 호스트는 IPv6 고유 로컬 범위 fc00::/7을 가리키는 문자열 접두사 목록("fc", "fd")과 대조되었고;
  • 이름을 통해 도달한 호스트는 확인(resolve)된 후 isLoopbackAddress, isAnyLocalAddress, isLinkLocalAddress, isSiteLocalAddress로 분류되었습니다.

이러한 술어들은 동일한 범위를 다루지 않습니다: isSiteLocalAddress는 폐기된 fec0::/10 블록을 보고하며, 이를 대체한 fc00::/7 고유 로컬 주소는 보고하지 않습니다, 그리고 JDK에는 이들을 위한 술어가 전혀 없습니다. 따라서 동일한 주소가 어떻게 작성되었는지에 따라 허용되거나 거부되었습니다.

런타임디렉터리스택
Camel Spring Bootcamel-spring-boot/Spring Boot 3.5.13 + camel-a2a 4.22.1
Camel Quarkuscamel-quarkus/Camel Quarkus 3.39.0 (Quarkus 3.39.0, Camel 4.22.0)

실행하기

호스트 이름은 fc00::/7로 확인되어야 하며, compose 파일은 extra_hosts 항목으로 이를 구성합니다 (Docker는 시작 시 이를 컨테이너의 /etc/hosts에 기록합니다) — 따라서 이는 Docker를 통해 실행하십시오, 단순한 java -jar가 아니라:

cd camel-spring-boot          # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
until curl -sf http://localhost:8080/exploit/ready >/dev/null; do sleep 1; done
curl -s http://localhost:8080/exploit/attack
docker compose down

영향을 받는 빌드에서의 출력(두 런타임 모두 동일):

Resolution in this environment: internal-service.example -> fd00:0:0:0:0:0:0:1

1) The unique local address as an IP LITERAL
     url: https://[fd00::1]/push-notification
     verdict: REFUSED - Webhook URL must not point to private/internal IPv6 ranges (SSRF protection): [fd00::1]

2) The SAME address reached through a host name
     url: https://internal-service.example/push-notification
     verdict: ACCEPTED, resolved to fd00:0:0:0:0:0:0:1

3) A legitimate host name that merely BEGINS with "fc" (the bug's other direction)
     url: https://fcm.googleapis.com/push-notification
     verdict: REFUSED - Webhook URL must not point to private/internal IPv6 ranges (SSRF protection): fcm.googleapis.com

4) CONTROL - an IPv4 private address, which isSiteLocalAddress does cover
     verdict: REFUSED - ... site-local/private address ...

5) CONTROL - a link-local IPv6 literal
     verdict: REFUSED - ... private/internal IPv6 ranges ...

>>> PROVEN: ...

프로브 1과 2는 동일한 주소인데 판정이 서로 다릅니다. 프로브 3은 반대 방향의 같은 불일치입니다. 문자열 사전 검사가 먼저 IP 리터럴인지 확인하지 않고 원시 호스트와 일치했기 때문에, 단지 fc 또는 fd로 시작하는 이름은 곧바로 거부되었습니다 — 아주 평범한 푸시 엔드포인트인 fcm.googleapis.com도 그중 하나입니다. 프로브 4와 5는 가드가 올바르게 작성된 곳에서 제대로 동작함을 보여주는 대조군입니다.

모든 프로브는 기본값(allowLocalWebhookUrls=false)이자 가드가 유지되어야 하는 구성인 allowLocal=false를 전달합니다.

이 격차가 초래하는 것

웹훅 URL은 푸시 알림을 등록하는 호출자로부터 TaskPushNotificationConfig.url로 전달되므로 공격자가 제어합니다. 그런 다음 PushNotificationDispatcher가 해당 주소로 푸시 알림을 전송하며, 같은 구성에 포함된 Authorization 헤더도 함께 전송합니다 — 그 스킴과 자격 증명은 등록하는 호출자가 제공합니다.

응답은 해당 호출자에게 다시 전달되지 않으므로, 이 격차가 초래하는 것은 Camel 프로세스에서 가드가 거부하도록 작성된 내부 주소로 나가는 블라인드 HTTPS 요청입니다. 그런 방식으로 서비스에 도달하려면 추가로 해당 이름이 대상 환경에서 fc00::/7로 확인되어야 하고, 해당 주소에서 HTTPS 서비스가 수신 대기 중이어야 하며, 요청되는 이름에 대해 TLS 핸드셰이크가 성공해야 합니다 — 이 때문에 심각도가 중간으로 평가됩니다.

취약점 요약

속성값
구성 요소camel-a2a (WebhookUrlValidator)
CWECWE-918 (서버 측 요청 위조)
심각도중간
공격 벡터호스트 이름이 fc00::/7로 확인되는 푸시 알림 웹훅 URL
영향가드가 거부했어야 할 내부 주소로, 구성된 Authorization 헤더와 함께 나가는 블라인드 HTTPS 요청
영향받는 버전4.21.0부터 4.22.2 이전
수정된 버전4.22.2, 4.23.0
JIRACAMEL-24371
크레딧2122295973 at qq dot com, ASF 보안 팀을 통해 보고됨

권고: https://camel.apache.org/security/CVE-2026-71569.html

수정 내용

이제 두 경로 모두 InetAddress.getByName을 거치며, 이는 대괄호로 묶인 IPv6 리터럴을 DNS를 건드리지 않고 파싱하고, 결과 주소를 하나의 공유 분류기로 원시 바이트로부터 분류합니다 — 따라서 호스트는 표기 방식이 아니라 그것이 나타내는 주소로 판정됩니다. 이 분류기는 fc00::/7과 공유 주소 공간 100.64.0.0/10, 그리고 내장된 IPv4 주소가 전 세계적으로 라우팅 가능하지 않은 IPv4 호환, NAT64(64:ff9b::/96) 및 6to4(2002::/16) 주소를 인식합니다.

main에서 apache/camel#25406 (54041cce)으로 수정되었고, camel-4.22.x로 #26583 (c4a5c5fc)에서 백포트되었습니다.

수정된 빌드 확인

camel.version을 4.22.2로 설정하고 다시 실행하십시오. 4.22.1 → 4.22.2에 대해 검증됨:

1) The unique local address as an IP LITERAL
     verdict: REFUSED - Webhook URL must not point to a unique local address (SSRF protection): [fd00::1]

2) The SAME address reached through a host name
     verdict: REFUSED - Webhook URL must not point to a unique local address (SSRF protection): internal-service.example

3) A legitimate host name that merely BEGINS with "fc"
     verdict: ACCEPTED, resolved to 216.239.38.55

이제 두 표기 모두 동일한 판정과 동일한 메시지를 받으며, 프로브 3의 오탐도 사라졌습니다.

업그레이드 없이 완화하기

A2A 푸시 알림 구성 경로 앞에 인증을 배치하여 웹훅 URL이 신뢰할 수 없는 호출자로부터 도달하지 않도록 하고, 네트워크 수준에서 Camel 프로세스에서 fc00::/7로의 이그레스를 차단하십시오. 배포 환경에서 IPv6가 필요하지 않은 경우, JVM을 -Djava.net.preferIPv4Stack=true로 시작하면 이 취약점이 악용하는 주소 클래스가 제거됩니다. allowLocalWebhookUrls=false는 이미 기본값이며 그 자체로는 이 취약점을 막지 못한다는 점에 유의하십시오 — 위의 프로브 2는 이 설정이 활성화된 상태에서 실행됩니다.

면책 조항

이 저장소는 교육 및 방어 목적으로 게시됩니다: Apache Camel 사용자가 취약점을 이해하고, 영향을 받는지 확인하며, 업그레이드가 이를 해결하는지 검증할 수 있도록 돕기 위해서입니다. 소유하거나 운영하지 않는 시스템에 이 자료를 사용하지 마십시오.

도구 다운로드