🔍 CVE-2026-18353

0.0
CVSS Score
UNKNOWN
2026-07-30
2026-10-23 22:10
✅ 완료

🇰🇷 한글 설명

PIA의 `/v1/upload/sbom` 엔드포인트가 JWT의 `iss` 클레임을 검증할 때 Python의 `urlparse`를 사용하여 허용 목록과 비교합니다. 하지만 `urlparse`와 `requests` 라이브러리가 백슬래시(\)가 포함된 URL을 서로 다르게 해석하는 취약점을 악용하여, 공격자는 허용된 도메인으로 위장한 뒤 실제로는 공격자의 서버로 연결을 유도할 수 있습니다.

💡 쉬운 설명

인증 정보를 확인할 때 주소를 검사하는 방식에 허점이 있어, 공격자가 가짜 주소를 진짜처럼 속일 수 있습니다. 이를 통해 시스템이 공격자의 서버에 접속하게 만들어 보안을 무력화할 수 있습니다.

🇺🇸 원문 (English)

PIA's `POST /v1/upload/sbom` endpoint accepts a Bearer JWT and checks its **unverified** `iss` claim against an issuer allowlist using Python's `urlparse` before performing OIDC discovery with `requests`. Because `urlparse` and `requests`/`urllib3` parse an authority string containing a backslash (e.g. `https://attacker-host\@ci.eclipse.org/`) into *different* hostnames, an attacker can craft an issuer that passes the allowlist check yet drives `requests` — and subsequently `urllib.request.urlopen` for JWKS retrieval — to connect to an arbitrary attacker-chosen host, port, and scheme.

📍 영향받는 시스템

PIA (v1/upload/sbom 엔드포인트를 사용하는 버전)

⚔️ 공격 벡터

백슬래시(\)를 포함하여 허용 목록을 통과하면서도 실제 요청은 공격자 서버로 향하게 만드는 조작된 JWT `iss` 클레임 주입

🛡️ 대응 방법

URL 파싱 시 일관된 라이브러리를 사용하도록 코드를 수정하고, JWT 클레임 검증 시 반드시 서명을 먼저 확인하도록 로직을 개선해야 합니다.

🔧 검증 코드

조작된 JWT를 포함한 요청을 보냈을 때, 서버가 공격자의 서버로 외부 요청을 시도하는지 네트워크 로그를 통해 확인합니다.

Shell / Script
curl -X POST -H 'Authorization: Bearer <manipulated_jwt>' https://<target-api>/v1/upload/sbom

💻 영향받는 소프트웨어

Python