Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-17544 — CVE-2026-17544 익스플로잇: PHP bcmath OOB 쓰기를 메모리 전용 RCE로 변환하여, 런타임 오프셋 없는 리졸버로 disable_functions와 open_basedir을 우회합니다. | Kitploit
도구/GitHubGitHub/r2qa/cve-2026-17544
Vulnerability AnalysisExploitationWeb Application ExploitationPost-ExploitationRed TeamingPayload DevelopmentBinary Exploitation
GitHubr2qa/cve-2026-17544

CVE-2026-17544

CVE-2026-17544 익스플로잇: PHP bcmath OOB 쓰기를 메모리 전용 RCE로 변환하여, 런타임 오프셋 없는 리졸버로 disable_functions와 open_basedir을 우회합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-17544 — PHP bcmath OOB 쓰기 → 범용 메모리 전용 RCE

CVE-2026-17544에 대한 무기화된 개념 증명(PoC)으로, PHP의 재작성된 bcmath 확장(bc_str2num)에서 발생하는 out-of-bounds 쓰기 취약점입니다. 이는 공개적으로 알려진 DoS 전용 크래시를 완전하고 보편적이며 메모리 전용인 원격 코드 실행 프리미티브로 변환하며, 동시에 disable_functions 및 open_basedir을 모두 우회합니다.

승인된 연구 / 교육용으로만 사용하십시오. 자신이 소유했거나 명시적으로 테스트 승인을 받은 시스템에서만 실행하십시오.

image

TL;DR

  • 버그: bc_str2num은 수동 scale에서 소수 부분을 잘라낸 후, 뒤쪽의 0을 다시 제거하지만 fractional_end를 갱신하지 않습니다. 버퍼는 다시 제거된 길이로 크기가 할당되는 반면 복사는 제거 전 길이를 사용합니다 → Zend MM 힙에 대한 제어된 out-of-bounds 0-쓰기가 발생합니다.
  • 익스플로잇: OOB 0-쓰기가 인접한 zend_string(길이는 유지됨)의 refcount를 0으로 만듭니다 → refcount 비동기화 use-after-free → 거대 문자열 상대 읽기/쓰기 → 오류 안전 절대 임의 읽기 → 런타임 심볼 해석 → 완전히 데이터 전용 네이티브 함수 호출.
  • 페이로드: 가짜 zend_class_entry + 인라인 function_table + 가짜 zend_function{ handler = zif_shell_exec }를 구축한 다음 이를 메서드로 호출합니다. 명령 출력은 문자열로 반환되어 응답/stdout으로 전달됩니다.
  • 하드코딩된 오프셋 없음. 기본 주소, .data 및 대상 심볼은 모두 메모리 스캔을 통해 런타임에 해석됩니다 — 따라서 단일 파일이 다양한 빌드와 배포판에서 동작합니다.

위협 모델 — 먼저 읽으십시오

이는 샌드박스 탈출 / 사후 악용 프리미티브이지, 원격 입력 전용 RCE가 아닙니다.

시나리오결과
공격자가 이미 PHP를 실행할 수 있지만(웹셸, 역직렬화, eval 싱크) disable_functions + open_basedir에 의해 제한된 경우✅ 네이티브 RCE (이 PoC)
애플리케이션이 단순히 원시 사용자 입력에 bcmath 함수를 호출하는 경우, 예:

단일 bcmath 호출은 공격자 입력에 대해 피드백이 없는 블라인드 OOB 0-쓰기 하나를 제공합니다. 전체 RCE를 위해서는 힙을 정리하고, R/W 프리미티브를 구축하고, 해석기를 실행할 수 있는 임의의 PHP 실행이 필요합니다 — 이 중 어느 것도 함수 인수로 표현할 수 없습니다. 따라서 입력 전용 노출의 현실적인 한계는 **원격 서비스 거부(DoS)**입니다. 코드 실행은 기존 PHP 실행 컨텍스트를 필요로 하며, 이 PoC는 그 컨텍스트를 샌드박스에서 해방시킵니다.


영향을 받는 버전

이 버그는 재작성된 bcmath(PHP 8.4 / 8.5 라인)에만 존재합니다:

수정되지 않은 동일 파일로 PHP 8.4.23 및 PHP 8.5.8, amd64에서 종단 간(uid=0, 출력 캡처) 검증됨 — Zend 구조체 레이아웃은 8.4 / 8.5에서 동일합니다.


요구 사항 / 가정

  • Linux amd64.
  • 취약한 범위의 PHP 8.4/8.5 바이너리와 bcmath 활성화.
  • 연속적인 바이너리 매핑(모든 표준 배포판 / 프로덕션 빌드). 런타임 기본 주소 스캔은 .text에서 ELF 헤더까지 페이지별로 내려갑니다. 이는 연속적으로 매핑된 모든 바이너리에서 안전합니다. 인위적인 -z separate-code 빌드처럼 매핑되지 않은 2MB 간격이 있는 경우에만 블라인드 스캔으로 자동 해석할 수 없습니다(프로덕션에서는 발견되지 않음).
  • 웹 전달의 경우 요청 격리가 필요하므로 요청별 exit()가 서버를 죽이지 않아야 합니다: php-fpm, Apache mod_php, 또는 PHP_CLI_SERVER_WORKERS>0가 설정된 내장 서버.

사용법

CLI

root@kitploit:~
php exploit.php "id; uname -a"

웹(사후 악용, 샌드박스 처리된 PHP 컨텍스트 내부)

예: shell.php로 배포한 후:

root@kitploit:~
GET  /shell.php?cmd=id
POST cmd=id

명령 출력은 zif_shell_exec를 통해 캡처되어 응답 본문에 기록됩니다.


작동 방식(상세)

  1. 트리거 + 힙 정리. 고정 크기 문자열을 스프레이하고, 구멍을 뚫은 다음 취약한 bccomp()를 실행하여 OOB 0-쓰기가 인접한 zend_string의 refcount에만 닿도록 합니다(길이는 유지됨).
  2. Refcount 비동기화 UAF. 참조가 여전히 매달려 있는 동안 희생자 문자열이 조기에 해제됩니다.
  3. 거대 문자열. 해제된 슬롯을 객체가 다시 차지하고, 매달린 문자열의 길이 필드가 거대한 값이 됩니다 → 힙에 대한 상대 읽기/쓰기.
  4. 절대 읽기. 가짜 zend_reference(간접 참조를 통해)는 대상의 refcounted 헤더를 건드리지 않는 오류 안전 절대 임의 읽기를 제공합니다.
  5. 해석. 유출된 .text 포인터에서: ELF 매직(기본 주소)까지 페이지 단계로 내려가고, 프로그램 헤더를 구문 분석하여 .data를 찾은 다음, .data에서 핸들러가 .text를 가리키는 shell_exec zend_function_entry를 스캔합니다.
  6. 데이터 전용 호출. 가짜 zend_class_entry, 단일 버킷을 가진 인라인 function_table(올바른 zend_string 해시, 종결된 충돌 체인), 그리고 핸들러가 인 가짜 을 구축합니다. 프로브 객체의 클래스 포인터를 손상시키고 메서드를 호출합니다. 출력은 반환되어 에코됩니다.

파일

  • exploit.php — 범용 메모리 전용 익스플로잇(CLI + 웹).

크레딧

  • 원본 공개 DoS 개념 증명: boreas37/cve-2026-17544-poc.
  • 메모리 노출 / 데이터 전용 호출 기법은 이전 PHP 익스플로잇 연구에서 영감을 받았습니다.

고지 사항

보안 연구 및 교육을 위해 제공됩니다. 작성자는 오용에 대해 책임을 지지 않습니다. 테스트 승인을 받지 않은 시스템에 배포하지 마십시오.

도구 다운로드
bccomp($_POST['v'])
❌ DoS / 크래시만 발생
PHP 브랜치취약 여부
7.x, 8.0 – 8.3아니요 (이전 libbcmath, 다른 bc_str2num)
8.4.0 – 8.4.23예
8.5.0 – 8.5.8예
≥ 8.4.24 / ≥ 8.5.9패치됨
zif_shell_exec
zend_internal_function