CVE-2025-63689
Summary
- CVE-2025-63689는 ycf1998의 money-pos 시스템에서 orderby 파라미터를 적절히 검증/탈취하지 않아 발생하는 다중 SQL 인젝션 취약점으로,/ 원격에서 임의 쿼리 실행 및 잠재적 명령/코드 실행으로 이어질 수 있음.
1. 취약점 사례 조사
CVE-2025-63689
- 영향 대상
ycf1998/money-pos프로젝트의 특정 커밋 이전 버전(커밋11f276bd20a41f089298d804e43cb1c39d041e59이전). 취약점은 API에서 사용자 제어값인orderby파라미터를 검증 없이 SQL 문에 직접 결합함으로써 발생 - 취약점 유형
SQL Injection (다중 위치). NVD-GHSA-Vulners 등에서 “orderby 파라미터를 통한 SQL Injection → 원격 코드 실행 가능”으로 보고되어 있음 - 발견-공개 시점
CVE 레코드는 2025-11-07에 공개되었고 이후 여러 보안 DB/어드바이저에서 레퍼런스와 패치 커밋을 링크 (원문 레퍼런스: NVD/CVE 페이지, GHSA advisory, cvedetails/vulners 등). https://nvd.nist.gov/vuln/detail/CVE-2025-63689?utm_source=chatgpt.com
2. 취약점 위험도 / 심각도 분석 (CVSS 스코어 기반)
a. CVE-2025-63689
- 공개된 CVSS v3.1 기본 점수: 10.0 (Critical)
여러 소스에서 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H 의 벡터로 기록되어 있음(원격 공격자, 낮은 공격 난이도, 인증 불필요, 완전한 기밀성/무결성/가용성 영향) - 공격자 위치(AV:N)
네트워크에서 직접 공격 가능 → 인터넷 노출 API/엔드포인트가 있다면 즉시 악용 가능 - 권한(PR:N)
인증 불필요로 익명 공격 가능 → 매우 위험 - 사용자 상호작용 (UI:N)
사용자의 개입 불필요 - 영향(Confidentiality/Integrity/Availability = H/H/H)
데이터 유출, 데이터 변조/삭제, 서비스 중단 또는 RCE 가능성
3. CVE → CWE 연결 분석
-
주요 CWE CWE-89 - Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection').
취약점 본질이 사용자 입력(정렬 파라미터)을 SQL 구문에 직접 포함(또는 불충분한 이스케이프/화이트리스트)하는 것이므로 CWE-89에 해당함. GHSA/NVD 등에서도 SQL Injection → CWE-89로 연결되어 있음 https://nvd.nist.gov/vuln/detail/CVE-2025-63689?utm_source=chatgpt.com
-
파생 가능성
정렬 파라미터가 애플리케이션 내부에서 파일 쓰기, ORM 쿼리 조작, 혹은 시스템 명령 실행으로 체인화될 경우 RCE(원격 코드 실행)이나 데이터베이스 권한 상승으로 발전할 수 있음 (실제 보고서에 RCE 가능성 언급) https://www.cvedetails.com/cve/CVE-2025-63689/?utm_source=chatgpt.com
4. PoC
-
Description
money-pos 시스템의 여러 조회 인터페이스에서 orderBy 파라미터에 SQL 인젝션 취약점이 존재한다. 취약한 인터페이스 목록은 다음과 같다:1.1.
GET /money-pos/roles?page=1&size=10&orderBy=id,desc1.2.
GET /money-pos/gms/brand?page=1&size=10&orderBy=id,desc1.3.
GET /money-pos/gms/goods?page=1&size=10&orderBy=id,desc1.4.
GET /money-pos/oms/order?page=1&size=10&orderBy=id,desc1.5.
GET /money-pos/ums/member?page=1&size=10&orderBy=id,desc1.6.
GET /money-pos/users?page=1&size=10&orderBy=id,desc -
Reproduce
Step 1
시스템의 최신 코드를 pull하여 로컬 환경에서 배포 및 실행한다.
Step 2
위 6개의 인터페이스는 취약점을 유발하는 로직이 동일하므로,
/money-pos/roles인터페이스를 선택해 재현을 진행한다.Step 3
시스템에 로그인한 후, 시스템 관리 → 역할 관리 메뉴에서 검색을 클릭하고, 동시에 BurpSuite로 해당 검색 요청을 캡처한다.
Step 4
orderBy필드에 다음 payload를 입력한다:
id,and sleep(1)
이후 인터페이스를 요청하면, 응답 시간이 약 3초가 걸리며 payload가 성공적으로 주입된 것을 확인할 수 있다.
-
Affected version
money-pos 최신 버전 포함 전 버전 전체 -
Repair suggestions
orderBy필드의 값을 프론트엔드에서 전달받은 문자열을 그대로 SQL에 직접 연결해 사용하면 안 된다.대신 프론트엔드–백엔드 간 매핑 방식을 사용해야 한다.
예:
프론트에서 전달된 파라미터
1→ 백엔드에서id,desc로 매핑하여 사용.
5. 유사 사례 비교
- CVE-2025-3107 (Newsletters plugin)
orderBy파라미터의 불충분한 이스케이프 때문에 시간 기반 SQLi가 가능했던 사례(워드프레스 플러그인). 권한이 있는 공격자가 민감 정보를 추출할 수 있었음. - CVE-2022-30048 (Mingsoft MCMS)
orderBy파라미터를 통해 SQLi가 발생했던 사례 — 오래된 CMS/플러그인에서 정렬 파라미터가 자주 누락되는 것을 확인할 수 있었음 - Querydsl / HQL orderBy 이슈 (GHSA-6q3q…)
라이브러리 레벨에서 orderBy 관련 HQL 인젝션 가능성이 보고되어 프레임워크/라이브러리 레이어에서도 유사한 실수가 발생할 수 있음을 시사함
모두 공통적으로 orderby / 정렬 파라미터가 원인이 되어 발생한 과거 취약점들(유사 패턴)입니다. 이 사례들은 실무에서 정렬 파라미터를 간과했을 때 얼마나 심각한 문제가 되는지를 보여줌
참고문헌
- NVD / CVE-2025-63689 레코드(상세). NVD
- CVE Details / cvedetails.com: 요약·영향·발행 이력. CVE Details
- GitHub Advisory (GHSA-3xhw-hf92-cgv2) — 관련 어드바이저리/패치 참조. GitHub
- CIRCL / vulners 기록(메타·CVSS 집계). vulnerability.circl.lu
- PortsWigger(ORDER BY 인젝션 설명) 및 유사 CVE 사례(예: CVE-2025-3107, CVE-2022-30048) — 정렬 파라미터 관련 과거 사례. portswigger.net