
🔐 CVE-2026-57821 - Apache Fineract SQL 인젝션 툴킷 📚 승인된 보안 테스트를 위한 두 개의 Python 스크립트: verifier.py(안전한 탐지, 추출 없음) 및 exploit.py(심층 분석). 11가지 DB 유형을 지원합니다. SQL 인젝션 취약점을 이해하는 데 완벽합니다. 합법적인 테스트만 ⚠️ 교육 및 연구 목적으로만 사용하세요.

⚠️ 법적 및 윤리적 고지
이 툴킷은 교육, 훈련 및 승인된 보안 테스트 목적으로만 제공됩니다.
명시적인 서면 허가 없이 시스템에 무단 사용하는 것은 불법이며 컴퓨터 범죄 법률을 위반합니다.
저자는 오용이나 손해에 대해 어떠한 책임도 지지 않습니다.
귀하의 행동에 대한 모든 책임은 귀하에게 있습니다.
CVE-2026-57821은 Apache Fineract의 사무실 목록 API 엔드포인트에서 발견된 SQL 인젝션 취약점입니다.
| 속성 | 세부사항 |
|---|
| 엔드포인트 | /api/v1/offices |
| 파라미터 | orderBy |
| 메서드 | GET |
| 인증 필요 | 예 (인증된 사용자만) |
| 영향받는 버전 | Apache Fineract ≤ 1.14.0 |
| 패치된 버전 | Apache Fineract 1.15.0 |
이 취약점은 orderBy 파라미터가 적절한 삭제(sanitization) 없이 SQL 쿼리에 직접 포함되기 때문에 발생합니다. 유효한 자격 증명을 가진 공격자는 orderBy 파라미터에 괄호 ()로 감싸진 서브쿼리를 주입할 수 있습니다.
이전 수정을 우회하는 이유:
ORDER BY 절을 삭제하기 위해 ColumnValidator를 도입했습니다.ORDER BY 컨텍스트 내에서 임의의 SQL 실행이 가능합니다.공격 벡터 예시:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
| 영향 | 설명 |
|---|---|
| 데이터 유출 | 시간 기반 블라인드 SQL 인젝션으로 민감한 데이터베이스 콘텐츠 추출 가능 |
| 서비스 거부 | 무거운 쿼리로 연결 풀 리소스 고갈 |
| 정보 노출 | 오류 기반 기법으로 데이터베이스 구조 및 데이터 노출 가능 |
| 속성 | 세부사항 |
|---|---|
| 발견자 / 제보자 | Terence Monteiro (Apache Fineract Team) |
| 공개일 | 2026년 7월 14일 |
| 패치된 버전 | Apache Fineract 1.15.0 |
| 공식 발표 | Apache 메일링 리스트 |
| GitHub 수정 | PR #6048 |
이 툴킷은 11가지 다른 데이터베이스 백엔드를 자동으로 감지하고 공격 기술을 조정합니다:
| 데이터베이스 | 감지 방법 | 공격 기술 |
|---|---|---|
| PostgreSQL | 시간 기반 (pg_sleep) | 시간 기반 블라인드 |
| MySQL | 시간 기반 (SLEEP) | 시간 기반 블라인드 |
| MariaDB | 시간 기반 + @@version_comment | 시간 기반 블라인드 |
| MSSQL | 오류 기반 (CONVERT 실패) | 오류 기반 |
| Oracle | 시간 기반 (DBMS_LOCK.SLEEP) | 시간 기반 블라인드 |
| SQLite | 무거운 쿼리 (카티전 조인) | 시간 기반 (무거운) |
| Firebird | 무거운 쿼리 (카티전 조인) | 시간 기반 (무거운) |
| DB2 | 무거운 쿼리 (카티전 조인) | 시간 기반 (무거운) |
| Informix | 무거운 쿼리 (카티전 조인) | 시간 기반 (무거운) |
| H2 | 무거운 쿼리 (카티전 조인) | 시간 기반 (무거운) |
| 알 수 없음 (일반) | PostgreSQL로 대체 | 시간 기반 |
이 프로젝트는 두 개의 Python 스크립트를 제공하며, 각각 다른 보안 평가 시나리오에 사용됩니다:
verifier.py – 안전하고 최소한의 확인 도구목적: 데이터 추출 없이 취약점 존재 여부를 빠르게 증명합니다.
기능:
VULNERABLE 또는 NOT VULNERABLE 보고✅ 장점:
📋 사용 사례: 대상이 취약한지 확인하기 위한 1차 평가.
exploit.py – 종합 보안 분석기목적: 취약점을 완전히 활용하여 데이터베이스 정보 추출.
기능:
✅ 장점:
📋 사용 사례: 취약점 확인 후 심층 보안 분석.
🔍 주요 차이점:
verifierPoC.py는 취약한지 여부를 알려주고,exploit.py는 무엇을 추출할 수 있는지 보여줍니다. 둘 다 보안 평가 워크플로에서 서로 다르지만 보완적인 역할을 합니다.
requests 라이브러리pip install requests
두 스크립트 상단에서 다음 변수를 수정하십시오:
| 변수 | 설명 | 기본값 |
|---|---|---|
TARGET | Fineract API URL | http://localhost:8080/fineract-provider/api/v1/offices |
USERNAME | API 인증 사용자 이름 | mifos |
PASSWORD | API 인증 비밀번호 | password |
TENANT_ID | 테넌트 식별자 | default |
BASE_SLEEP | 시간 기반 테스트 지연 시간 (exploit.py) | 6 |
SLEEP_SECONDS | 시간 기반 테스트 지연 시간 (verifier.py) | 5 |
TIMEOUT | HTTP 요청 시간 초과 | 25 (exploit) / 15 (verifier) |
MAX_RETRIES | 실패한 요청 재시도 횟수 | 2 |
1️⃣ exploit.py - 심층 스캔
python3 exploit.py
예상 출력:
CVE-2026-57821 - Apache Fineract Vulnerability Verifier
══════════════════════════════════════════════════════════════════════════════════════
@tc4dy is here :) Good Luck!
CONNECTION SUCCESS
BASELINE: 0.234s
STARTING VULNERABILITY VERIFICATION
VERIFICATION RESULTS
PostgreSQL: VULNERABLE
MySQL: NOT VULNERABLE
MariaDB: NOT VULNERABLE
Oracle: NOT VULNERABLE
MSSQL: NOT VULNERABLE
CONCLUSION: TARGET IS VULNERABLE (CVE-2026-57821 CONFIRMED)
Interpretation: If VULNERABLE appears for any database type, the target is affected.
CVSS 점수 메트릭 값 CVSS v3.1 기본 점수 8.1 (높음) 벡터 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H 공격 경로 네트워크 필요 권한 낮음 사용자 상호작용 없음 EPSS 점수
0.29% (30일 이내 악용 확률)
CWE 매핑
CWE‑89: SQL 명령어 내 특수 요소 부적절한 중화 ('SQL 인젝션')
페이로드가 작동하는 이유
Apache Fineract 1.14.0의 취약한 코드:
// Simplified vulnerable logic
String orderBy = request.getParameter("orderBy");
if (ColumnValidator.isValid(orderBy)) {
// VALIDATOR FAILS FOR: "(SELECT ...)"
// Only checks against simple column names
String sql = "SELECT * FROM offices ORDER BY " + orderBy;
// Executes query with user input directly
}
공격자 페이로드 예시:
GET /api/v1/offices?orderBy=(SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)&limit=1
결과 SQL:
SELECT * FROM offices ORDER BY (SELECT CASE WHEN (1=1) THEN pg_sleep(5) ELSE pg_sleep(0) END)
ColumnValidator는 컬럼 이름을 확인하지만 중첩된 서브쿼리를 놓쳐 임의의 SQL 실행을 허용합니다.
| 조치 | 우선순위 |
|---|---|
| Apache Fineract 1.15.0+로 업그레이드 | 🔴 긴급 |
| PR #6048 패치 적용 | 🔴 긴급 |
WAF 규칙: (SELECT, SLEEP(, pg_sleep(, WAITFOR가 포함된 orderBy 차단 | 🟠 높음 |
로그 모니터링: 괄호나 서브쿼리 키워드가 포함된 orderBy 감시 | 🟠 높음 |
| 데이터베이스 연결 풀 모니터링으로 리소스 고갈 탐지 | 🟡 중간 |