HTTP 정원
HTTP Garden은 취약성을 훨씬 쉽게 찾을 수 있는 방식으로 상호 작용하는 스크립트와 함께 구성 가능하도록 구성된 HTTP 서버 및 프록시 모음입니다. HTTP Garden에서 찾을 수 있는 취약점에 대한 멋진 데모를 보려면 ShmooCon 2024 강연을 확인하세요.
감사의 말
이 프로젝트를 가능하게 해준 Galois, Trail of Bits, Narf Industries 및 Dartmouth College의 친구들에게 감사의 말씀을 전하고 싶습니다.
이 자료는 계약 번호 HR0011-19-C-0076에 따라 DARPA(국방고등연구계획국)에서 지원한 작업을 기반으로 합니다.
시작하기
종속성
- HTTP Garden은 x86_64 Linux에서 실행되며 다른 플랫폼에서는 테스트되지 않았습니다.
- 대상 서버는 Docker 컨테이너에서 구축되고 실행되므로 Docker가 필요합니다.
- 또한 PyPI(예:
pip 사용) 또는 시스템 패키지 관리자에서 얻을 수 있는 다음 Python 패키지가 필요합니다.
시스템 패키지 관리자를 사용하여 Python 패키지를 설치하는 경우 시스템에 따라 패키지 이름 앞에 py3- , python3- 또는 python- 을 붙여야 할 수도 있습니다.
- 또한 패키지 관리자에서 rlwrap을 설치하는 것이 좋습니다. 이렇게 하면 Garden repl이 훨씬 더 재미있어지기 때문입니다.
건물
docker build ./images/http-garden-soil -t http-garden-soil
이 이미지에는 몇 가지 기본 유틸리티와 프로세스를 종료하지 않고 프로세스에서 적용 범위를 수집하는 데 도움이 되는 포크된 AFL++가 포함되어 있습니다.
- 일부 HTTP 서버 및 프록시를 구축하십시오.
docker compose build gunicorn hyper nginx haproxy nginx_proxy
물론 HTTP Garden에는 우리가 방금 구축한 것보다 훨씬 더 많은 대상이 있습니다. 단지 그것들을 모두 구축하는 데 시간이 오래 걸린다는 것입니다. 이 몇 가지를 구축하는 데에도 몇 분이 소요됩니다!
달리기
docker compose up gunicorn hyper nginx haproxy nginx_proxy
rlwrap python3 tools/repl.py
- HAProxy를 통해 기본 GET 요청을 필터링한 다음 Nginx 역방향 프록시를 통해 필터링한 다음 결과를 Gunicorn, Hyper 및 Nginx 원본 서버로 보내고 해석이 일치하는지 표시합니다.
garden> payload 'GET / HTTP/1.1rnHost: whateverrnrn' # Set the payload
garden> transduce haproxy nginx_proxy # Run the payload through the reverse proxies
[1]: 'GET / HTTP/1.1rnHost: whateverrnrn'
haproxy
[2]: 'GET / HTTP/1.1rnhost: whateverrnrn'
nginx_proxy
[3]: 'GET / HTTP/1.1rnHost: echornConnection: closernrn'
garden> servers gunicorn hyper nginx # Select the servers
garden> grid # Show their interpretations
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ ✓
hyper | ✓ ✓
nginx | ✓
모두 동의하는 것 같습니다. 좀 더 흥미로운 페이로드를 시도해 보겠습니다.
garden> payload 'POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0nrn'
garden> grid
g
u
n
i h n
c y g
o p i
r e n
n r x
+-----
gunicorn|✓ ✓ X
hyper | ✓ X
nginx | ✓
불일치가 있습니다! Nginx는 청크 라인으로 끝나는 라인으로 n 지원하지만 Hyper와 Gunicorn은 지원하지 않기 때문입니다. Nginx는 여기서 기술적으로 RFC 9112를 위반하고 있지만 그 영향은 미미할 것 같습니다.
디렉토리 레이아웃
images
images 디렉토리에는 Garden의 각 HTTP 서버 및 변환기에 대한 하위 디렉토리가 포함되어 있습니다. 각 대상은 자체 Docker 이미지를 갖습니다. 가능한 경우 모든 프로그램은 소스에서 빌드됩니다. 각 대상의 여러 버전을 쉽게 구축할 수 있도록 모든 대상은 저장소 URL( APP_REPO ), 분기 이름( APP_BRANCH ) 및 커밋 해시( APP_VERSION )로 매개변수화됩니다.
tools
tools 디렉토리에는 서버와 상호 작용하는 데 사용되는 스크립트가 포함되어 있습니다. 그 안에는 당신이 찾을 수 있습니다
-
diagnose_anomalies.py : 퍼징 중에 무시할 테스트 중인 시스템의 양성 HTTP 구문 분석 문제를 열거하기 위한 스크립트, -
repl.py : HTTP Garden에 대한 기본 사용자 인터페이스입니다. -
update.py : docker-compose.yml 의 커밋 해시를 업데이트하는 스크립트입니다. - ...그리고 사용자에게 표시되지 않는 몇 가지 스크립트가 더 있습니다.
대상
HTTP 서버
| 이름 | 로컬로 실행되나요? | 보장 범위가 수집되었나요? |
|---|
| 아이오http | 예 | 예 |
| 아파치_httpd | 예 | 예 |
| apache_tomcat | 예 | 아니요 |
| 체루트 | 예 | 예 |
| cpp_httplib | 예 | 아니요 |
| dart_stdlib | 예 | 아니요 |
| eclipse_grizzly | 예 | 아니요 |
| eclipse_jetty | 예 | 아니요 |
| 빠른http | 예 | 아니요 |
| go_stdlib | 예 | 아니요 |
| 총니콘 | 예 | 예 |
| h2o | 예 | 예 |
| haproxy_fcgi | 예 | 아니요 |
| 하이퍼 | 예 | 아니요 |
| 하이퍼콘 | 예 | 예 |
| ktor | 예 | 아니요 |
| libevent | 예 | 아니요 |
| libmicrohttpd | 예 | 아니요 |
| libsoup | 예 | 아니요 |
| 가벼운 | 예 | 예 |
| 몽구스 | 예 | 예 |
| 네티 | 예 | 아니요 |
| nginx | 예 | 예 |
| node_stdlib | 예 | 아니요 |
| 오픈라이트속도 | 예 | 아니요 |
| openwrt_uhttpd | 예 | 예 |
| php_stdlib | 예 | 아니요 |
| phusion_passenger | 예 | 아니요 |
| 프로토콜_http1 | 예 | 아니요 |
| 퓨마 | 예 | 아니요 |
| 서비스 토크 | 예 | 아니요 |
| 폭풍 | 예 | 아니요 |
| 꼬인 | 예 | 아니요 |
| 일각수 | 예 | 아니요 |
| 유비콘 | 예 | 예 |
| 웨이트리스 | 예 | 예 |
| 웹릭 | 예 | 아니요 |
| iis | 아니요 | 아니요 |
| openbsd_httpd | 아니요 | 아니요 |
HTTP 변환기
| 이름 | 로컬로 실행되나요? |
|---|
| apache_httpd_proxy | 예 |
| 아파치_트래픽_서버 | 예 |
| go_stdlib_proxy | 예 |
| h2o_proxy | 예 |
| 하프록시 | 예 |
| haproxy_invalid | 예 |
| lighttpd_proxy | 예 |
| ngtpx | 예 |
| nginx_proxy | 예 |
| openlitespeed_proxy | 예 |
| 핑고라 | 예 |
| 파운드 | 예 |
| 오징어 | 예 |
| 광택 | 예 |
| 아카마이 | 아니요 |
| awselb_classic | 아니요 |
| awselb_application | 아니요 |
| aws_cloudfront | 아니요 |
| 클라우드플레어 | 아니요 |
| 빠르게 | 아니요 |
| google_classic | 아니요 |
| google_global | 아니요 |
| iis_proxy | 아니요 |
| openbsd_relayd | 아니요 |
버그
HTTP Garden을 사용하여 발견한 버그는 다음과 같습니다. 자신만의 것을 찾으면 PR을 제출하여 이 목록에 추가하세요! 각 버그는 다음 필드로 설명됩니다.
- 사용 사례: 공격자가 이 버그로 실행할 수 있는 공격 유형
- 요구 사항: 이 버그를 악용하려면 필수 구성 옵션 또는 기타 서버가 필요합니다.
- 위험: 없음|낮음|보통|높음, 간단한 설명이 이어집니다.
- 없음: 버그가 악용될 가능성이 없습니다.
- 낮음: 버그가 악용될 수 있지만 정말 이상한 구성이 필요하거나 본 적이 없는 방식으로 작동하는 프록시에 의존합니다.
- 중간: 버그가 악용될 가능성이 높지만 중간 정도의 영향만 미치거나 가능성이 낮은 서버/변환기 조합이 필요합니다.
- 높음: 일반적인 구성 및 서버/변환기 조합에서 버그가 악용될 수 있습니다.
- 페이로드: 버그를 유발하는 페이로드 예시
- 영향을 받는 프로그램: 보고 및 패치 타임라인과 함께 이 버그가 존재하는 서버 목록입니다. 일부 구현 버그는 일반적이므로 이로 인해 목록이 복잡해지지 않습니다. :)
서버 버그
이는 서버가 요청을 수락하고 해석하는 방식의 버그입니다.
- Python
int 생성자는 청크 크기를 구문 분석하는 데 사용되므로 0x , _ , + 및 - 가 잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기를 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기.
- 위험도: 중간. 변환기 버그 7을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 군니콘:
- 2023년 8월 1일: GH 문제를 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 8월 10일: 커밋에서 수정되었습니다.
-
x00 , r 또는 n 헤더 값에 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 값에서 이러한 바이트를 전달하거나
n 헤더 라인 종결자로 받아들이고 전달하는 변환기. - 위험: 높음. 변환기 버그 10, 12 및 16을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnHeader: vnx00raluernrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 군니콘:
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 폭풍:
- 2023년 8월 11일: GH 문제를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 헤더 이름 끝에서 공백이 잘못 제거되었습니다.
- 사용 사례: 밀수 요청
- 요구 사항:
: 앞의 공백을 헤더 이름의 일부로 간주하는 변환기. - 위험도: 낮음. 취약한 변환기가 있는지는 모르겠지만 James Kettle은 적어도 하나는 존재한다고 말합니다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length : 34rnrnGET / HTTP/1.1rnHost: whateverrnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- 체루트:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 4일: 수정되지 않은 상태로 유지됩니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 2023년 8월 14일: CVE-2023-40518이 할당되었습니다.
- 첫 번째 헤더 이름의 시작 부분에서 공백이 잘못 제거되었습니다.
- 사용 사례: 밀수 요청
- 요구사항: 첫 번째 헤더 이름 시작 부분의 공백을 헤더 이름의 일부로 간주하는 변환기.
- 위험도: 낮음. 나는 취약한 변환기를 알지 못합니다.
- 페이로드:
GET / HTTP/1.1rntContent-Length: 1rnrnX - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 20일: GH 보안 권고 의견을 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- HTTP 버전은 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET /test HTTP/1.32rnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 14일: GH 이슈 및 PR을 통해 보도됨.
- 2023년 10월 15일: 커밋에서 수정되었습니다.
- HTTP 메서드는 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: ACL 우회
- 요구사항: 유효하지 않은 메소드 이름을 있는 그대로 전달하는 변환기.
- 위험도: 중간. 해당 버그가 아직 보고되지 않아 설명을 생략합니다.
- 페이로드:
G=":<>(e),[T];?" /get HTTP/1.1rnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 14일: GH 이슈 및 PR을 통해 보도됨.
- 2023년 10월 15일: 커밋에서 수정되었습니다.
- URI는 전혀 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET ! HTTP/1.1rnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 16일: GH 이슈를 통해 보고되었습니다.
- 2023년 10월 16일: PR에서 수정되었습니다.
- 일부 비ASCII 바이트가 헤더 이름에 잘못 허용됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/1.1rnxefoo: barrnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 17일: PR을 통해 보고됨.
- 2023년 10월 18일: 위 PR의 병합을 통해 수정되었습니다.
- 다프네:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 10일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 5일: 커밋에서 수정되었습니다.
- 요청 줄에서 공백을 구분하는 데
n 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: HTTP/0.9 요청을 있는 그대로
n 전달하고 기본 연결을 재사용하는 변환기. - 위험도: 낮음. 나는 취약한 변환기를 알지 못합니다.
- 페이로드:
GET /nHTTP/1.1rnrn - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 10월 17일: PR을 통해 보고됨.
- 2023년 10월 18일: 병합을 통해 수정되었습니다.
- Python
int 생성자는 Content-Length 값을 구문 분석하는 데 사용되므로 _ , + 및 - 잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
Content-Length 값을 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기. - 위험도: 낮음. 취약한 변환기가 있는지는 모르겠지만 Matt Grenfeldt는 적어도 하나는 존재한다고 말합니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: +1_0rnrn0123456789 - 영향을 받는 프로그램:
- AIOHTTP:
- 2023년 8월 1일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 10월 7일: 릴리스 3.8.6에서 수정되었습니다.
- CPython http.서버:
- 2023년 4월 2일: GH 문제를 통해 보고되었습니다.
- 2023년 4월 2일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 2일: GH 보안 권고를 통해 보고되었습니다.
- 2023년 8월 10일: 커밋에서 수정되었습니다.
- 작업:
- 2023년 6월 1일: GH 문제를 통해 보고되었습니다.
- 2023년 6월 7일: 커밋 88c5c78에서 수정되었습니다.
- 여러 개의
Transfer-Encoding: chunked 헤더가 포함된 요청은 허용되며 메시지 본문이 없는 것으로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 여러
Transfer-Encoding 헤더가 포함된 요청을 전달하는 변환기. - 위험: 높음. 변환기 버그 28을 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnTransfer-Encoding: chunkedrnrn1rnZrn0rnrn - 영향을 받는 프로그램:
- 폭풍:
- 2023년 10월 7일: GH 보안 권고를 통해 보고되었습니다.
- 2024년 6월 6일: 보안 권고 릴리스에서 수정되었습니다.
-
xa0 및 x85 헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 알 수 없는
Transfer-Encoding 값을 전달하고 이를 chunked 와 구별되는 것으로 처리하는 변환기. - 위험도: 중간. 변환기 버그 18을 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: xa0chunkedxa0rnrn0rnrn - 영향을 받는 프로그램:
- 폭풍:
- 2024년 2월 4일: GH 보안 권고 의견을 통해 보고되었습니다.
- 2024년 2월 4일: 수정되지 않은 상태로 유지됩니다.
-
r 헤더 필드 줄에서 줄 종결자로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름에
r 전달하는 변환기. - 위험: 높음. 변환기 버그 10을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnVisible: :/rSmuggled: :)rnrn - 영향을 받는 프로그램:
- CPython http.서버:
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 몽구스:
- 2023년 7월 7일: GH 문제를 통해 보고되었습니다.
- 2023년 7월 9일: 커밋 6957c37에서 수정되었습니다.
- 허용되지 않는 ASCII 문자가 헤더 이름에 잘못 허용됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/1.1rnx00x01x02x03x04x05x06x07x08tx0bx0cx0ex0fx10x11x12x13x14x15x16x17x18x19x1ax1bx1cx1dx1ex1f "(),/;<=>?@[/]{}: whateverrnrn - 영향을 받는 프로그램:
- 다프네:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 10일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 5일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 8월 11일: GH 문제를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다. OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- HTTP 버전은 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/rr1.1rnrn - 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 빈
Content-Length 값은 0 인 것처럼 처리됩니다.
- 사용 사례: 밀수 요청
- 요구사항: 빈
Content-Length 값을 0이 아닌 값으로 해석하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length: rnrn - 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2023년 7월 31일: GH 이슈를 통해 보고됨
- 2023년 8월 11일: 커밋에서 수정되었습니다.
- 빛tpd:
- 2023년 8월 1일: Issue Tracker를 통해 보고되었습니다.
- 2023년 8월 3일: 커밋에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 빈 청크 크기는
0 인 것처럼 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 간에 추가
rn 을 허용하고 전달하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnrnrn - 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2023년 12월 2일: GH 이슈를 통해 보고됨.
- 2024년 1월 4일: 커밋에서 수정되었습니다.
- 하이퍼:
- 2023년 12월 1일: 이메일을 통해 보고되었습니다.
- 2023년 12월 18일: 커밋에서 수정되었습니다.
- 몽구스:
- 2024년 1월 3일: GH 이슈를 통해 보고됨.
- 2024년 1월 3일: PR에서 수정되었습니다.
- 빈 헤더 이름이 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
rn:rn 받아들이고 전달하며 이를 헤더 블록의 끝으로 처리하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rn: ignoredrnHost: whateverrnrn - 영향을 받는 프로그램:
- 인터넷/http로 이동:
- 2024년 1월 24일: GH 이슈를 통해 보고됨.
- 2024년 1월 30일: 커밋에서 수정되었습니다.
- 군니콘:
- 2023년 12월 4일: GH 이슈를 통해 보고됨.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- Node.js:
- 2023년 10월 13일: GH 이슈를 통해 보고되었습니다.
- 2023년 10월 17일: 커밋에서 수정되었습니다.
- 폭풍:
- 2023년 10월 13일: GH 이슈 댓글을 통해 보고되었습니다.
- 2023년 10월 15일: 수정되지 않은 상태로 유지됩니다.
-
rn 공백이 아닌 모든 시퀀스는 헤더 값의 시작 부분( : 뒤)에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 필드 라인의 베어
n 라인 엔딩을 받아들이고 전달하는 변환기. - 위험도: 중간. 변환기 버그 16을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnUseless:nnGET / HTTP/1.1rnrn - 영향을 받는 프로그램:
- 군니콘:
- 2023년 6월 2일: 이메일을 통해 보고되었습니다.
- 2024년 1월 31일: GH 이슈를 통해 보고됨.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
-
xa0 및 x85 바이트는 : 앞의 헤더 이름 끝에서 제거됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름에서
xa0 또는 x85 허용하고 전달하는 변환기. - 위험: 중간. 변환기 버그 6을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Lengthx85: 10rnrn0123456789 - 영향을 받는 프로그램:
- 건니콘:
- 2023년 6월 27일: 이메일을 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
-
,chunked chunked 와는 다른 인코딩으로 처리됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
,chunked Transfer-Encoding 값을 있는 그대로 전달하고 이를 chunked 값과 동일하게 해석하는 변환기. - 위험: 높음. 변환기 버그 9를 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn - 영향을 받는 프로그램:
- 건니콘:
- 2023년 11월 6일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 25일: 커밋에서 수정되었습니다.
- 몽구스:
- 2023년 11월 6일: GH 이슈를 통해 보고되었습니다.
- 2023년 12월 1일: 커밋에서 수정되었습니다.
- 승객:
- 2023년 11월 6일: 이메일을 통해 보고되었습니다.
- 2024년 1월 22일: 릴리스에서 수정되었습니다.
- 잘못된 청크 크기는 가장 긴 유효한 접두사로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 접두사가 잘못된 청크 크기(예: 접두사
0x )를 허용하고 전달하는 변환기. - 위험: 높음. 변환기 버그 2 및 19를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn0_2ernrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn - 영향을 받는 프로그램:
- H2O:
- 2023년 8월 1일: 이메일을 통해 보고되었습니다.
- 2023년 12월 12일: PR에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 웹릭:
- 2023년 11월 9일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 3일: PR에서 수정되었습니다.
- 여러 개의 충돌하는
Content-Length 헤더가 있는 요청이 수락되어 첫 번째 헤더의 우선순위가 높아집니다.
- 사용 사례: 밀수 요청
- 요구 사항: 2개의
Content-Length 헤더가 있는 요청을 수락하고 전달하며 마지막 헤더의 우선 순위를 지정하는 변환기. - 위험도: 중간. 변환기 버그 22를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: 1rnContent-Length: 0rnrnZ - 영향을 받는 프로그램:
- H2O:
- 2023년 11월 30일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: GH 문제를 통해 보고되었습니다.
- 2024년 7월 10일: 수정되지 않은 상태로 유지됩니다.
- OpenLite속도:
- 2024년 6월 26일: GH 이슈를 통해 보고되었습니다.
- 2024년 7월 10일: 수정되지 않은 상태로 유지됩니다.
- HTTP 버전 번호의 8비트 정수 오버플로입니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음
- 페이로드:
GET / HTTP/4294967295.255rnrn - 영향을 받는 프로그램:
- 라이브벤트:
- 2024년 1월 17일: PR을 제출했습니다.
- 2024년 1월 18일: 병합에서 수정되었습니다.
- 청크 크기는
strtoll(,,16) 사용하여 구문 분석되므로 0x , + 및 - 접두사가 잘못 허용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기를 가장 긴 유효한 접두사로 해석하지만 있는 그대로 전달하는 변환기.
- 위험도: 중간. 변환기 버그 2를 참조하세요.
- 페이로드:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn - 영향을 받는 프로그램:
- 라이브벤트:
- 2024년 1월 18일: PR 제출.
- 2024년 2월 18일: 병합에서 수정되었습니다.
- OpenLite속도:
- 2023년 8월 2일: 이메일을 통해 보고되었습니다.
- 2023년 8월 11일: OLS 1.7.18에서 수정되었습니다.
- 부정적인
Content-Length 헤더를 사용하여 서버를 무한 통화 루프에 빠뜨릴 수 있습니다.
- 사용 사례: DoS
- 요구 사항: 없음.
- 위험: 높음. 이 버그는 악용하기가 쉽지 않습니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: -48rnrn - 영향을 받는 프로그램:
- 몽구스:
- 2023년 4월 27일: 이메일을 통해 보고되었습니다.
- 2023년 5월 16~18일: 커밋 4663090, 926959a 및 2669991에서 수정되었습니다.
- CVE-2023-34188이 할당되었습니다.
- 이름이나 값이 없는 헤더를 수신하면 HTTP 헤더 블록이 잘립니다.
- 사용 사례: 밀수 요청
- 요구사항: 빈 헤더 이름을 전달하는 변환기.
- 위험도: 중간. 보너스 보너스 버그 2를 참조하세요.
- 페이로드:
GET / HTTP/1.1rn:rnI: am chopped offrnrn - 영향을 받는 프로그램:
- 몽구스:
- 2023년 6월 26일: GH 이슈를 통해 보고되었습니다.
- 2023년 6월 29일: 커밋 415bbf2에서 수정되었습니다.
- 헤더 이름은 공백만으로 값과 분리될 수 있습니다. 아니요
: 필수입니다.
- 사용 사례: 밀수 요청
- 요구사항:
: 을 포함하지 않는 헤더 라인을 전달하는 변환기. - 위험도: 중간. 변환기 버그 14를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnContent-Length 10rnrn0123456789 - 영향을 받는 프로그램:
- 몽구스:
- 2023년 7월 7일: GH 문제를 통해 보고되었습니다.
- 2023년 7월 7일: 커밋 5dff282에서 수정되었습니다.
- 잘못된
Content-Length 헤더는 가장 긴 유효한 접두사와 동일하게 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 잘못된 접두사(예:
0x 또는 + )가 포함된 Content-Length 값을 전달하는 변환기 - 위험: 높음. 변환기 버그 1을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnContent-Length: 1ZrnrnZ - 영향을 받는 프로그램:
- 몽구스:
- 2023년 7월 31일: GH 이슈를 통해 보고됨
- 2023년 8월 17일: 커밋에서 수정되었습니다.
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 헤더 블록은
rnrX 에서 잘못 종료될 수 있습니다. 여기서 X 임의의 바이트일 수 있습니다.
- 사용 사례: ???
- 요구 사항:
r 로 시작하는 헤더 이름을 전달하거나 r 줄 접기 줄 시작 공백으로 허용하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: arnrZGET /evil: HTTP/1.1rnHost: arnrn - 영향을 받는 프로그램:
- Node.js:
- 2023년 7월 7일: HackerOne 보고서를 통해 보고되었습니다.
- 2023년 7월 31일: llhttp 커밋에서 수정되었습니다.
- 2023년 9월 16일: 노드 커밋에서 수정되었습니다.
- 청크 라인이
rX 에서 잘못 종료되었습니다. 여기서 X 임의의 바이트일 수 있습니다.
- 사용 사례: 밀수를 요청합니다.
- 요구 사항: Chunk-ext의 선택적 공백 내에서
r 전달하는 변환기. - 위험: 높음. 변환기 버그 3을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn5rr;ABCDrn34rnErn0rnrnGET / HTTP/1.1rnHost: arnContent-Length: 5rnrn0rnrn - 영향을 받는 프로그램:
- Node.js:
- 2023년 7월 9일: HackerOne 댓글을 통해 보고되었습니다.
- 2023년 7월 31일: llhttp 커밋에서 수정되었습니다.
- 2023년 9월 16일: 노드 커밋에서 수정되었습니다.
-
Content-Length 헤더는 strtoll(,,0) 으로 해석되므로 선행 0 , + , - 및 0x 잘못 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 표준에서 허용하는
Content-Length 값에서 선행 0 을 전달하는 변환기. - 위험: 높음. 이는 표준을 준수하는 변환기에 대해 악용될 수 있습니다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnContent-Length: 010rnrn01234567 - 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 여러 개의 충돌하는
Content-Length 헤더가 있는 요청이 허용되며 마지막 헤더가 우선적으로 적용됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 2개의
Content-Length 헤더가 있는 요청을 수락하고 전달하는 변환기. 첫 번째 우선 순위를 지정합니다. - 위험도: 낮음. 나는 그러한 변환기에 대해 알지 못하지만, 그러한 변환기가 존재할 가능성이 매우 높아 보입니다.
- 페이로드:
GET / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 1rnrnZ - 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: 이메일을 통해 신고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 헤더 값에는
r 허용됩니다.
- 사용 사례: ???
- 요구 사항: 헤더 값의
r 잘못 해석하고 전달하는 변환기. - 위험도: 낮음. 나는 그런 변환기를 모른다.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnHeader: varluernrn - 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 10일: OLS 1.7.18에서 수정되었습니다.
- 헤더 값은
x00 에서 잘립니다.
- 사용 사례: ACL 우회
- 요구사항: 헤더 값에서
x00 전달하는 변환기. - 위험도: 중간. 변환기 버그 12를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: whateverrnTest: testx00THESE BYTES GET DROPPEDrnConnection: closernrn - 영향을 받는 프로그램:
- OpenLite속도:
- 2023년 11월 3일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: 이 날짜 또는 그 이전에 수정되었습니다.
- 라이브벤트:
- 2024년 1월 29일: GH 보안 권고를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- 캐리지 리턴은 청크 확장의 세미콜론 뒤의 선택적 공백 내에서 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 이 위치에서
rr rn 과 동일하게 처리하는 서버. - 위험: 높음. 서버 버그 31을 참조하세요.
- 페이로드:
POST /abc HTTP/1.1rnTransfer-Encoding: chunkedrnHost: h2o.http-garden.usrnrn41;a=brrXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXrn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 412rnrn0rnrnGET /def HTTP/1.1rnHost: h2o.http-garden.usrnrn - 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 12월 3일: 이메일을 통해 보고되었습니다.
- 2024년 7월 10일: 이 날짜 또는 그 이전에 수정되었습니다.
- 헤더 이름은 여러 줄에 걸쳐 계속될 수 있습니다.
- 사용 사례: 밀수를 요청합니다.
- 요구사항:
: 을 포함하지 않는 헤더 라인을 전달하는 변환기. - 위험도: 중간. 변환기 버그 14를 참조하십시오.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-rnEncoding: chunkedrnContent-Length: 5rnrn0rnrn - 영향을 받는 프로그램:
- 승객:
- 2023년 11월 6일: 이메일을 통해 보고되었습니다.
- 2024년 1월 22일: 릴리스에서 수정되었습니다.
- 요청의 빈
Content-Length '시간 초과가 발생할 때까지 읽기'로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 빈
Content-Length 헤더 값을 수락 및 전달하고 이를 0과 동일하게 처리하는 변환기. - 위험도: 중간. 변환기 버그 5 및 11을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnHost: localhostrnContent-Length: rnrnGET / HTTP/1.1rnHost: localhostrnrn - 영향을 받는 프로그램:
- 퓨마:
- 2023년 6월 16일: 이메일을 통해 보고되었습니다.
- 2023년 8월 17일: Puma 6.3.1 및 5.6.7에서 수정되었습니다. 권고를 참조하세요.
- 청크된 메시지 본문은
rnXX 에서 종료됩니다. 여기서 XX 임의의 2바이트일 수 있습니다.
- 사용 사례: 밀수 요청
- 요구 사항: 트레일러 필드를 유지하고 트레일러 필드 내의
: 와 값 사이에 공백을 추가하지 않는 변환기. (ATS는 그러한 서버 중 하나입니다) - 위험: 높음. 이 버그를 악용하기 위한 요구 사항에서는 변환기가 표준을 위반할 것을 요구하지 않습니다.
- 페이로드:
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrn0rnX:POST / HTTP/1.1rnrn - 영향을 받는 프로그램:
- 퓨마:
- 2023년 7월 31일: 이메일을 통해 신고되었습니다.
- 2023년 8월 17일: Puma 6.3.1 및 5.6.7에서 수정되었습니다. 권고를 참조하세요.
- CVE-2023-40175가 할당되었습니다.
- HTTP 메서드와 버전은 검증되지 않습니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음.
- 페이로드:
x00 / HTTP/............0596.7407.rnrn - 영향을 받는 프로그램:
- 웨이트리스:
- 2023년 10월 17일: PR을 제출했습니다.
- 2024년 2월 4일: PR 병합 문제가 수정되었습니다.
-
xa0 및 x85 Transfer-Encoding 헤더를 제외하고 헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 헤더 값 ACL 우회
- 요구 사항:
xa0 및 x85 제자리에서 받아들이고 전달하는 변환기. - 위험도: 중간. 표준을 통해 변환기는 헤더 값에 obs-text를 전달할 수 있습니다.
- 페이로드:
GET /login HTTP/1.1rnHost: arnUser: x85adminxa0rnrn - 영향을 받는 프로그램:
- 웨이트리스:
- 2024년 2월 4일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 4일: 커밋에서 수정되었습니다.
- 빈
Content-Length 값은 0 과 동일하게 해석되며 후속 Content-Length 값보다 우선순위가 높습니다.
- 사용 사례: 밀수 요청
- 요구 사항: 비어 있지 않은 Content-Length 값보다 먼저 빈
Content-Length 값을 전달하고 비어 있지 않은 값을 해석하는 변환기. - 위험: 높음. 변환기 버그 11을 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnContent-Length: rnContent-Length: 43rnrnPOST /evil HTTP/1.1rnContent-Length: 18rnrnGET / HTTP/1.1rnrn - 영향을 받는 프로그램:
- 웹릭:
- 2023년 8월 14일: GH 문제를 통해 보고되었습니다.
- 2023년 8월 15일: PR에서 수정되었습니다.
-
x00 헤더 값의 끝에서 제거됩니다.
- 사용 사례: ACL 우회
- 요구사항: 헤더 값에서
x00 전달하는 변환기. - 위험도: 중간. 변환기 버그 12를 참조하십시오.
- 페이로드:
GET / HTTP/1.1rnEvil: evilx00rnrn - 영향을 받는 프로그램:
- 웹릭:
- 2023년 11월 30일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 3일, 2024년: PR에서 수정되었습니다.
- 알 수 없는 모든 전송 코딩은
chunked 과 동일하게 처리됩니다.
- 사용 사례: 밀수 요청
- 요구사항:
identity 및 chunked 이외의 전송 인코딩을 전달하는 변환기. 이는 표준에 의해 허용됩니다. - 위험: 높음. 이는 일부 표준 호환 변환기에 대한 요청 밀수를 허용합니다.
- 페이로드:
POST / HTTP/1.1rnHost: arnTransfer-Encoding: bleghrnrn1rnZrn0rnrn - 영향을 받는 프로그램:
- 빠른HTTP:
- 2024년 2월 4일: 이메일을 통해 신고되었습니다.
- 2024년 2월 11일: 커밋에서 수정되었습니다.
- 유효한 요청 이후 잘못된 요청이 파이프라인되면 연결이 조기에 닫힙니다.
- 사용 사례: ???
- 요구 사항: 없음.
- 위험: 없음.
- 페이로드:
GET / HTTP/1.1rnConnection: closernrnInvalidrnrn - 영향을 받는 프로그램:
- 몽구스:
- 2024년 1월 29일: GH 이슈를 통해 보고됨.
- 2024년 2월 13일: 커밋에서 수정되었습니다.
- 유비콘:
- 2024년 1월 29일: GH 토론 댓글을 통해 보고되었습니다.
- 2024년 2월 6일: 커밋에서 실수로 수정되었습니다.
-
x80 보다 큰 바이트는 헤더 값의 시작과 끝에서 제거됩니다.
- 사용 사례: 문제가 많습니다.
- 요구 사항:
x80 보다 큰 바이트가 포함된 호스트 헤더를 전달하는 변환기. - 위험도: 중간.
- 페이로드:
POST / HTTP/1.1rnHost: xffaxffrnTransfer-Encoding: xffchunkedxffrnrn1rnZrn0rnrn - 영향을 받는 프로그램:
- 혈액 요소 질소:
- 2024년 2월 13일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 13일: 수정되지 않은 상태로 유지됩니다.
- 잘못된 청크가 수신되면 연결이 닫히지 않고 다음 메시지의 시작은 잘못된 청크 다음의 첫 번째
rn 뒤에 배치됩니다.
- 사용 사례: 응답 큐 중독.
- 요구 사항: 유효하지 않은 청크를 전달하는 변환기.
- 위험도: 중간.
- 페이로드:
POST / HTTP/1.1rnHost: whateverrnTransfer-Encoding: chunkedrnrnINVALID!!!rnGET / HTTP/1.1rnHost: whateverrnrn - 영향을 받는 프로그램:
- 체루트:
- 2024년 2월 14일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 14일: 수정되지 않은 상태로 유지됩니다.
- 초기 요청 버퍼의 파이프라인 요청은
Content-Length: 0 헤더가 있더라도 버퍼에 있는 첫 번째 요청의 메시지 본문으로 해석됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 들어오는 스트림 요소 경계를 변경하지 않는 변환기.
- 위험도: 낮음. 나는 그런 변환기를 모른다
- 페이로드:
POST / HTTP/1.1rnContent-Length: 0rnConnection:keep-alivernHost: arnid: 0rnrnPOST / HTTP/1.1rnHost: arnid: 1rnContent-Length: 34rnrn GET / HTTP/1.1rnHost: arnid: 2rnrn - 영향을 받는 프로그램:
- 퓨마:
- 2024년 2월 2일: 이메일을 통해 신고되었습니다.
- 2024년 2월 2일: 커밋에서 수정되었습니다.
변환기 버그
이는 변환기가 요청을 해석, 정규화 및 전달하는 방식의 버그입니다.
-
0x 접두사가 붙은 Content-Length 값은 메시지 본문의 유효성 검사 없이 잘못 승인 및 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항:
Content-Length 가장 긴 유효한 접두사로 해석하거나 0x 접두사가 붙은 Content-Length 해석하는 서버. - 위험도: 중간. 서버 버그 10, 29, 32를 참조하세요.
- 페이로드:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnContent-Length: 0x10rnrnZ - 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
- 잘못된 청크 크기 값이 잘못 승인되고 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: HTTP/1.1 백엔드 서버
- 위험: 높음. 이 버그는 임의의 백엔드에 대한 요청 밀수에 악용될 수 있었습니다.
- 페이로드:
POST / HTTP/1.1rnHost: akamai.my-domain.coolrnTransfer-Encoding: chunkedrnrnZrnZZrnZZZrnrn - 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
-
r ; .
- 사용 사례: 밀수 요청
- 요구 사항: 이 위치에서
r 잘못 해석하는 서버. - 위험: 높음. 서버 버그 31을 참조하세요.
- 페이로드:
POST / HTTP/1.1rnHost: server.my-domain.coolrnTransfer-Encoding: chunkedrnrn2rr;arn02rn41rn0rnrnGET /bad_path/pwned HTTP/1.1rnHost: arnContent-Length: 430rnrn0rnrnGET / HTTP/1.1rnHost: server.my-domain.coolrnrn - 영향을 받는 프로그램:
- 아카마이 CDN:
- 2023년 9월 7일: 이메일을 통해 신고되었습니다.
- 2023년 11월 27일: 이메일을 통해 수정 사항을 알렸습니다.
- Apache 트래픽 서버:
- 2023년 9월 20일: GH 이슈를 통해 보고되었습니다.
- 2024년 2월 13일: PR에서 수정되었습니다.
- Google Cloud 기본 애플리케이션 부하 분산기:
- 2023년 9월 13일: Google IssueTracker를 통해 보고되었습니다.
- 2024년 1월 30일: 이 날짜 또는 그 이전에 수정되었습니다.
- 잘못된 청크가 포함된 메시지는 메시지 본문 없이 전달됩니다.
- 사용 사례: ???
- 요구 사항: 해당 없음
- 위험: 없음.
- 페이로드:
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1r0n - 영향을 받는 프로그램:
- 파운드:
- 2024년 6월 13일: GH 문제를 통해 보고되었습니다.
- 2024년 6월 14일: 커밋에서 수정되었습니다.
- 빈
Content-Length 헤더가 잘못 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 빈
Content-Length 값을 0이 아닌 것으로 해석하는 서버 - 위험도: 중간. 서버 버그 38을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnhost: whateverrncontent-length: rnrn - 영향을 받는 프로그램:
- Apache 트래픽 서버:
- 2023년 8월 2일: GH 이슈를 통해 보고되었습니다.
- 2023년 8월 6일: PR을 통해 수정되었습니다.
- 허용되지 않는 바이트는 헤더 이름 내에서 허용 및 전달됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 헤더 이름 내에서 이러한 잘못된 바이트를 잘못 해석하는 서버.
- 위험: 중간. 서버 버그 41을 참조하세요.
- 페이로드:
GET / HTTP/1.1rnHost: fanoutrnHeaderx85: valuernrn - 영향을 받는 프로그램:
- Apache 트래픽 서버:
- 2023년 6월 29일: 이메일을 통해 보고되었습니다.
- 2023년 9월 18일: GH 이슈를 통해 보고되었습니다.
- 2024년 1월 31일: 수정되지 않은 상태로 유지됩니다.
- OpenBSD 중계:
- 2023년 11월 10일: 이메일을 통해 보고되었습니다.
- 2023년 11월 28일: 커밋에 패치가 적용되었습니다.
- 청크 크기는 가장 긴 유효한 접두사로 해석되어 다시 방출됩니다.
- 사용 사례: 밀수 요청
- 요구 사항: 청크 크기의
0_ 또는 0x 접두사를 해석하는 서버. - 위험: 높음. 서버 버그 1, 25 및 변환기 버그 19를 참조하세요.
- 페이로드 :
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn1these-bytes-never-get-validatedrnZrn0rnrn - 영향을받는 프로그램 :
- 아파치 트래픽 서버 :
- 2023 년 10 월 10 일 : GH 문제를 통해보고되었습니다.
- 2024 년 2 월 13 일 : Pr.
- 자리 표시 자 :)
-
Transfer-Encoding: ,chunked 헤더는 손상되지 않은 상태로 전달되며 chunked 와 동등한 것으로 해석됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 알 수없는
Transfer-Encoding S를 무시하고 chunked 것과는 ,chunked 되는 처리를 무시하는 서버. - 위험 : 높음. 서버 버그 21을 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnHost: arnTransfer-Encoding: ,chunkedrnrn0rnrn - 영향을받는 프로그램 :
- Azure CDN :
- 2023 년 10 월 15 일 : MSRC 취약성 보고서를 통해보고되었습니다.
- 2023 년 11 월 29 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 2023 년 12 월 12 일 : "이 사건은 HTTP 밀수가 취약성을 고려하지 않기 때문에 MSRC의 서비스에 대한 기준을 충족시키지 못하며이 사건을 마감 할 것입니다."
- nghttpx :
- 2023 년 10 월 14 일 : 이메일을 통해보고되었습니다.
- 2023 년 10 월 17 일 : Pr.
-
r 헤더 값으로 잘못 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
r 헤더 필드 내에서 rn 에 해당하는 서버. - 위험 : 중간. 서버 버그 13을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnInvalid-Header: thisrvaluerisrinvalidrnrn - Google Class Classic Application Load Balancer :
- 2023 년 9 월 7 일 : Google IssueTracker를 통해보고했습니다.
- 2024 년 1 월 30 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 빈
Content-Length 헤더가 먼저 오는 한 비어있는 Content-Length 헤더가 다른 Content-Length 헤더가있는 경우에도 잘못 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 빈
Content-Length 값을 0으로 해석하고 들어오는 요청에서 여러 Content-Length 헤더를 수락하는 서버. 첫 번째 우선 순위. - 위험 : 중간. 서버 버그 42를 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnhost: whateverrncontent-length: rncontent-length: 59rnrnPOST /evil HTTP/1.1rnhost: whateverrncontent-length: 34rnrnGET / HTTP/1.1rnhost: whateverrnrn - 영향을받는 프로그램 :
- Haproxy :
- 2023 년 8 월 2 일 : GH 문제를 통해보고되었습니다.
- 2023 년 8 월 9 일 : Commit에서 고정.
- 2023 년 8 월 10 일 : CVE-2023-40225 할당.
-
x00 헤더 값으로 전달됩니다.
- 유스 케이스 : ACL 바이 패스
- 요구 사항 :
x00 에서 헤더 값을 자르는 서버. - 위험 : 중간. 서버 버그 35 및 43 및 트랜스 듀서 버그 20을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnHost: google.comx00.kallus.orgrnrn - 영향을받는 프로그램 :
- Haproxy :
- 2023 년 9 월 19 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 31 일 : Commit에서 고정.
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
- Bare
n 청크 라인 터미네이터로 허용됩니다.
- 유스 케이스 : ???
- 요구 사항 : N/A
- 위험 : 없음
- 페이로드 :
GET / HTTP/1.1rnTransfer-Encoding: chunkedrnrnarn0123456789n0rnrn - 영향을받는 프로그램 :
- Haproxy :
- 2024 년 1 월 25 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 30 일 : Commmits 7B737DA 및 4837E99에서 고정.
- 아니오가있는 필드 라인
: as-is는 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 헤더 필드 라인을
: 해석하는 백엔드 서버. - 위험 : 중간. 트랜스 듀서 버그 28 및 37을 참조하십시오.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTenst: testrnConnection: closernrn - 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
-
Transfer-Encoding 값이 인식되지 않은 경우 Content-Length 및 Transfer-Encoding 헤더를 모두 포함하는 요청이 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
Content-Length 보다 Transfer-Encoding 우선 순위로 취급하고 ,chunked chunked 되는 백엔드 서버. 이러한 행동은 표준에 의해 허용됩니다. - 위험 : 높음. 이를 통해 표준 호환 서버에 밀수를 할 수 있습니다.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnConnection: closernrn0rnrn - 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
- 파운드:
- 2024 년 2 월 4 일 : GH 문제를 통해보고되었습니다.
- 2024 년 3 월 29 일 : Commit에서 고정.
-
n 전달 된 메시지에서 rn 으로 정규화되지 않습니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
n 헤더 라인에서 끝나는 줄로 해석하지 않는 백엔드 서버. 표준을 통해 서버는 n 으로 변환 할 수 있습니다 . - 위험 : 높음. 이 버그는 표준 호환 서버에 대해 이용 가능합니다.
- 페이로드 :
GET / HTTP/1.1nHost: whatevernConnection: closenn - 영향을받는 프로그램 :
- OpenLitespeed :
- 2023 년 11 월 3 일 : 이메일을 통해보고되었습니다.
- 2024 년 1 월 31 일 : 픽스되지 않은 상태로 남아 있습니다.
- 터미네이터 청크가
Content-Length 로 Transfer-Encoding 헤더를 교체하지 않고 chunk가 묻지 않기 전에 추가 rn 포함하는 청크 메시지 본체.
- 사용 사례 : 밀수 요청
- 요구 사항 : 없음.
- 위험 : 높음. 이 버그는 임의의 백엔드 서버에 대해 악용 가능합니다.
- 페이로드 :
POST / HTTP/1.1rnHost: arnTransfer-Encoding: chunkedrnrn17rn0rnrnGET / HTTP/1.1rnrnrnrn0rnrn - 영향을받는 프로그램 :
- OpenLitespeed
- 2023 년 11 월 30 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 :이 날짜 또는 그 이전에 수정되었습니다.
-
Transfer-Encoding: ,chunked 헤더는 손상되지 않으며 chunked 와 동등한 것으로 해석되지 않습니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 해석하는 서버는
chunked 와 동일하게 ,chunked 되며 표준은 당신이 할 수 있다고 말합니다. - 위험 : 높음. 이것은 표준 호환 백엔드에 대해 사용할 수있는 요청 밀수 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rnHost: whateverrnTransfer-Encoding: ,chunkedrnContent-Length: 5rnrn0rnrn - 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 28 일 : Commit에서 패치.
-
+ , - 및 0x 접두사가있는 청크 크기는 해석 및 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 청크 크기를 가장 긴 유효한 접두사로 해석하는 서버.
- 위험 : 높음. 서버 버그 22를 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnTransfer-Encoding: chunkedrnrn-0x0rnrn - 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 28 일 : Commit에서 패치.
- 파운드:
- 2023 년 10 월 10 일 : GH 문제를 통해보고되었습니다.
- 2023 년 10 월 11 일 : Commits 60A4F42 및 F70DB92를 통해 수정.
-
x00 또는 n 포함하는 헤더는 이전 헤더 값에 연결됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 모든 표준 호환 백엔드 서버.
- 위험 : 높음. 이것은 일반적인 요청 처리 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rna:brncx00rnrn - 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 10 일 : 이메일을 통해보고되었습니다.
- 2023 년 11 월 29 일 : Commit에서 패치.
- 메시지 본문은
Content-Length 헤더를 제거하지 않고 GET 요청에서 벗어납니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 파이프 라인을 지원하는 모든 백엔드 서버.
- 위험 : 높음. 이것은 일반적인 요청 처리 취약성입니다.
- 페이로드 :
GET / HTTP/1.1rnContent-Length: 10rnrn1234567890 - 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 28 일 : 이메일을 통해보고되었습니다.
- 2023 년 12 월 1 일 : Commit에서 패치.
- 여러
Content-Length 헤더가 포함 된 요청이 전달되어 마지막 것의 우선 순위를 정합니다.
- 사용 사례 : 밀수 요청
- 요구 사항 : 여러
Content-Length 헤더가 포함 된 요청을 수락하는 서버. 첫 번째 우선 순위. - 위험 : 높음. 서버 버그 23을 참조하십시오.
- 페이로드 :
POST / HTTP/1.1rnHost: arnContent-Length: 0rnContent-Length: 31rnrnGET /evil HTTP/1.1rnHost: arnrn - 영향을받는 프로그램 :
- OpenBSD 릴레이 :
- 2023 년 11 월 30 일 : 이메일을 통해보고되었습니다.
- 2024 년 7 월 10 일 : 픽스되지 않은 상태로 남아 있습니다.
-
Content-Length 및 Transfer-Encoding 모두 포함 된 요청이 전달됩니다.
- 사용 사례 : 밀수 요청
- 요구 사항 :
Transfer-Encoding 보다 Content-Length 우선시하거나 Transfer-Encoding: chunked . - 위험 : 높음. 이것은 고전적인 요청 밀수 벡터입니다.
- 페이로드 :
POST / HTTP/1.1rnHost: arnCon