Zephyr의 HTTP 서버(subsys/net/lib/http)는 구성된 루트 디렉터리의 파일을 제공하는 정적 파일 시스템 리소스 유형(HTTP_RESOURCE_TYPE_STATIC_FS, CONFIG_FILE_SYSTEM이 활성화된 경우 사용 가능)을 제공합니다. 이 수정 이전에는 HTTP/1 및 HTTP/2 프런트 엔드 모두 공격자가 제어하는 원시 요청 경로를 ./.. 세그먼트를 해결하지 않고 client->url_buffer(HTTP/1의 경우 on_url()에서 어셈블되고 HTTP/2의 경우 :path 의사 헤더에서 그대로 복사됨)에 배치했습니다. 그런 다음 static-FS 핸들러는 bu
Zephyr의 HTTP 서버(subsys/net/lib/http)는 구성된 루트 디렉터리의 파일을 제공하는 정적 파일 시스템 리소스 유형(HTTP_RESOURCE_TYPE_STATIC_FS, CONFIG_FILE_SYSTEM이 활성화된 경우 사용 가능)을 제공합니다. 이 수정 이전에는 HTTP/1 및 HTTP/2 프런트 엔드 모두 공격자가 제어하는 원시 요청 경로를 ./.. 세그먼트를 해결하지 않고 client->url_buffer(HTTP/1의 경우 on_url()에서 어셈블되고 HTTP/2의 경우 :path 의사 헤더에서 그대로 복사됨)에 배치했습니다. 그런 다음 정적 FS 처리기는 구성된 루트를 해당 원시 URL(http_server_http1.c:603 및 http_server_http2.c:490의 snprintk(fname, ..., "%s%s", static_fs_detail->fs_path, client->url_buffer))과 직접 연결하고 fs_open(fname, FS_O_READ)을 사용하여 열어 디스크 상의 파일 이름을 구축했습니다. 와일드카드/leading-dir(fnmatch FNM_LEADING_DIR) 또는 대체 리소스 일치를 통해 핸들러에 도달하기 때문에 GET //../../과 같은 요청이 핸들러로 전달되고, 기본 파일 시스템(예: LittleFS/FAT)이 .. 세그먼트를 확인한 후 구성된 웹 루트를 이스케이프하여 인증되지 않은 원격 클라이언트가 마운트된 볼륨에서 임의의 읽을 수 있는 파일을 읽을 수 있도록 합니다(정보 공개). HTTP 서버는 이 경로에 도달하기 위해 TLS나 인증이 필요하지 않습니다. 수정 사항은 http_server_remove_dot_segments()를 추가하여 두 프로토콜 처리기에서 리소스를 조회하기 전에 URL의 경로 부분을 정규화하여 순회를 무력화합니다. 정적 파일 시스템 리소스를 등록하는 배포의 경우 릴리스 v4.0.0~v4.4.0에 영향을 줍니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 75.00 |
| 악용 신호(PoC 존재) | ×1.20 |
| VPI | 90.00 |
VPI 공식 vpi-v1 기준