Files
Gnuboard5/docs/security-kve-2026-2344.md
whitedot ff8e8741b3 security: KVE-2026-2344 관리자 날짜 필터 검증과 속성 인코딩으로 XSS 차단
보관함과 상품판매순위에서 날짜 전체 형식·실제 달력 날짜·기간 순서를 검증하고 잘못된 요청을 조회 전에 HTTP 400으로 거부한다. 날짜 출력과 조회 링크를 각각 인코딩하고 최초 조회·분류·정렬·페이징을 유지한다.

검증: 변경 PHP 문법 검사, 100개 잘못된 날짜 입력과 정상 조회·윤년·페이징 회귀 검사, Chromium 속성 주입 및 이벤트 차단 검사 통과. 실제 관리자 세션과 운영 DB 검증 및 배포는 미실행.
2026-09-09 07:58:16 +00:00

3.8 KiB

KVE-2026-2344 관리자 날짜 필터 보완

보관함(wishlist.php, 메뉴 500140)과 상품판매순위(itemsellrank.php, 메뉴 500100)의 날짜 필터를 보완했다. 기존에는 입력에 숫자가 하나라도 있으면 원문을 허용하고 HTML 속성에 직접 출력하여 반사 XSS가 발생할 수 있었다.

변경 동작

  • 두 화면은 공통 date_filter.lib.php로 날짜를 검사한다. 관리자 권한 확인 뒤, 화면 헤더 출력과 조회 SQL 실행 전에 검증한다.
  • fr_date와 to_date는 모두 문자열이며 8자리 ASCII 숫자여야 한다. checkdate()로 실제 날짜인지 확인하고 시작일이 종료일보다 늦으면 거부한다.
  • 날짜 파라미터가 하나라도 전달되면 두 값 모두 유효해야 한다. 배열·빈 문자열·한쪽 누락·개행·잘못된 달력 날짜·기간 역전은 HTTP 400과 고정 안내 문구로 거부한다. 공격 문자열은 안내에 반영하지 않는다.
  • 날짜 파라미터가 모두 없는 최초 조회는 전체 기간을 조회한다. 보관함은 빈 날짜, 판매순위는 기존과 같이 종료일에 오늘 날짜를 표시한다.
  • 날짜 input은 htmlspecialchars의 ENT_QUOTES | ENT_SUBSTITUTE와 UTF-8로 인코딩한다.
  • 페이지 이동·정렬 링크의 필터는 http_build_query로 URL 인코딩하고 HTML 속성에 맞게 인코딩한다. 필터를 사용하지 않은 조회에서는 빈 날짜를 링크에 넣지 않는다. 페이지 이동 중 분류·날짜·정렬 조건을 유지한다.

일반 관리자 권한 검사와 상품·회원·주문 데이터 저장 동작은 변경하지 않는다. 스키마 변경이나 데이터 마이그레이션은 필요하지 않다.

검증

php tests/admin_date_filter.php
node tests/admin_date_filter.js

브라우저 검증에는 Playwright와 Chromium이 필요하다. 별도 설치 경로를 사용하는 경우 PLAYWRIGHT_MODULE과 CHROME_EXECUTABLE 환경변수로 지정할 수 있다.

PHP 검증은 실제 두 페이지를 실행하며 인증·DB·공통 헤더는 대역을 사용한다. 실제 입력·출력·페이징 및 정렬 함수로 다음을 확인한다.

  • 두 페이지와 두 날짜 필드에 대한 100개 잘못된 입력의 HTTP 400 거부 및 조회 SQL 미실행
  • 한쪽 날짜 누락, 명시적 빈값, 기간 역전 거부
  • 최초 전체 조회와 페이지 이동, 윤년 정상 조회, 분류 필터와 정렬 조건 유지
  • Chromium에서 추가 이벤트 속성과 스크립트 실행 표식이 생성되지 않음
  • 검증 단계와 별도로, 실제 input 출력문에 속성 주입 문자열을 넣어도 출력 인코딩으로 값 안에만 남고 포커스 이벤트가 실행되지 않음

운영 DB·실제 관리자 세션을 사용하거나 회원 권한을 변경하는 검증은 수행하지 않는다. 배포 전 운영과 동등한 격리 환경에서 관리자 로그인·권한별 접근과 정상 조회를 추가 확인한다.

배포 및 보고 상태

현재 상태는 코드 수정 및 격리 회귀 검증 완료다. 운영 반영과 수정 버전 배포 완료를 의미하지 않는다. 배포 버전·배포일은 확정 후 별도로 기록한다.

인터넷진흥원 중간 회신 문구:

KVE-2026-2344와 관련하여 관리자 보관함 및 동일 원인이 확인된 상품판매순위의 날짜 입력 검증과 출력 인코딩을 보완하였습니다. 잘못된 날짜 입력은 조회 전에 거부하도록 수정하였으며, 정상 조회·정렬·페이지 이동과 브라우저의 이벤트 실행 차단을 격리 환경에서 검증하였습니다. 현재 코드 수정 및 회귀 검증을 완료한 상태이며, 운영 반영 및 배포 버전·배포일은 확정 후 조치 결과와 함께 별도 통보하겠습니다.