
Proof of Concept for CVE-2026-65761 - EasyStore Pro Unauthenticated SQL Injection via `filter_sortby`
filter_sortby를 통한 SQL 인젝션 개념 증명(PoC)이 저장소는 EasyStore Joomla 확장 프로그램의 1.0.0~2.0.2(포함) 버전에 영향을 미치는 인증되지 않은 SQL 인젝션 취약점인 CVE-2026-65761에 대한 교육용 개념 증명(PoC)을 제공합니다. filter_sortby 매개변수가 라이선스로 제한되어 있으므로 플러그인의 Pro 버전만 영향을 받습니다.
PoC(poc.py)는 제품 검색 흐름(option=com_easystore&view=products&task=search)의 filter_sortby 요청 매개변수에서 오류 기반(error-based) 검사를 통해 SQL 인젝션을 시연합니다.
이 프로젝트와 Docker 스택은 로컬 보안 테스트 및 교육 목적으로만 제공됩니다.
소유하지 않았거나 명시적으로 테스트 권한을 받지 않은 시스템에 대해 실행하지 마십시오.
취약한 코드 경로는 Pro 전용 기능에 있습니다. 이 코드 경로를 재현 가능한 로컬 랩에서 감사할 수 있도록, 이 저장소는 Pro 라이선스로 제한된 정렬/필터 경로를 실행할 수 있게 컨테이너에 임시 monkeypatch를 적용합니다.
이는 라이선스 우회 기법으로 제공되는 것이 아니며, 실제 배포 환경에서 유료 기능에 접근하는 데 사용해서는 안 됩니다. 유일한 목적은 격리된 로컬 테스트 환경에서 방어적 보안 연구와 조정된 취약점 검증을 가능하게 하는 것입니다.
.
├── backup.sql.gz
├── poc.py
├── vulnerable/
│ ├── docker-compose.yaml
│ └── setup.sh
└── patched/
├── docker-compose.yaml
└── setup.sh
poc.py: 익스플로잇 PoC.vulnerable/docker-compose.yaml: http://127.0.0.1:9999에서 실행되는 취약한 랩 스택.patched/docker-compose.yaml: http://127.0.0.1:9999에서 실행되는 패치된 랩 스택.backup.sql.gz: 이 PoC에 필요한 최소한의 EasyStore 쇼핑몰 데이터셋(제품 2개, 카테고리 1개, 기본 쇼핑몰 설정)이 포함된 부트스트랩 덤프.vulnerable/setup.sh 및 patched/setup.sh: 실행 중인 MariaDB 컨테이너에 backup.sql.gz를 가져옵니다.pip install requests
취약한 환경을 시작합니다:
docker compose -f vulnerable/docker-compose.yaml up -d
그런 다음 필요한 EasyStore 테스트 데이터를 준비합니다:
cd vulnerable
./setup.sh
cd ..
PoC를 실행합니다:
python3 poc.py
취약한 환경에서 기대되는 결과:
[!] Target is vulnerable to CVE-2026-65761!
먼저 (실행 중인 경우) 취약한 스택을 중지합니다:
docker compose -f vulnerable/docker-compose.yaml down -v
패치된 환경을 시작합니다:
docker compose -f patched/docker-compose.yaml up -d
그런 다음 동일한 EasyStore 테스트 데이터를 준비합니다:
cd patched
./setup.sh
cd ..
동일한 PoC를 실행합니다:
python3 poc.py
패치된 환경에서 기대되는 결과:
[-] Target is not vulnerable to CVE-2026-65761
poc.py에서 대상 URL은 기본적으로 http://localhost:9999로 설정됩니다.
랩을 다른 호스트나 포트에서 실행하는 경우 이를 조정하십시오.