🇰🇷 한글 설명
Open Source Point of Sale 3.4.3 이전 버전의 Daily Sales 관리 테이블에서 고객명(customer_name) 컬럼이 escape: false로 설정되어 있어 Stored XSS 취약점이 발생합니다. 고객 관리 권한을 가진 공격자가 고객의 이름 필드에 악성 JavaScript를 주입하면, Daily Sales 페이지를 조회하는 모든 사용자의 브라우저에서 실행됩니다.
💡 쉬운 설명
POS 시스템에서 고객 이름을 입력할 때 안전하지 않은 처리로 인해 악의적인 코드가 삽입될 수 있습니다. 이 코드는 시스템을 사용하는 다른 사람의 컴퓨터에서 자동으로 실행되어 정보 탈취 등의 피해를 줄 수 있습니다.
🇺🇸 원문 (English)
Open Source Point of Sale is a web based point-of-sale application written in PHP using CodeIgniter framework. Prior to 3.4.3, a Stored Cross-Site Scripting (XSS) vulnerability exists in the Daily Sales management table. The customer_name column is configured with escape: false in the bootstrap-table column configuration, causing customer names to be rendered as raw HTML. An attacker with customer management permissions can inject arbitrary JavaScript into a customer's first_name or last_name field, which executes in the browser of any user viewing the Daily Sales page. This vulnerability is fixed in 3.4.3.
📍 영향받는 시스템
Open Source Point of Sale 3.4.2 이하 (PHP, CodeIgniter 기반)
⚔️ 공격 벡터
고객 관리 권한 보유자가 고객의 first_name 또는 last_name 필드에 JavaScript 코드 주입
🛡️ 대응 방법
3.4.3 이상으로 업그레이드하거나 bootstrap-table 컬럼 설정에서 escape: true로 변경
🔧 검증 코드
escape: false 설정이 있는 줄이 출력되면 취약점이 존재하는 것이며, 아무것도 출력되지 않거나 escape: true만 보이면 패치가 적용된 상태입니다.
grep -r 'escape.*false' /path/to/ospos/assets/js/ | grep -i 'customer\|sales'