🇰🇷 한글 설명
Gogs는 오픈 소스 자체 호스팅 Git 서비스입니다. 버전 0.13.3 및 이전 버전에서 'PUT /repos/:owner/:repo/contents/*' 엔드포인트는 쓰기 권한을 요구하지 않으며 repoAssignment()를 통해 읽기 권한만으로 접근을 허용합니다. 권한 확인 후 PutContents()는 UpdateRepoFile()를 호출하여 커밋을 생성하고 git push를 실행합니다. 결과적으로 읽기 전용 권한의 토큰을 사용하여 저장소 내용을 수정할 수 있습니다. 이 문제는 버전 0.13.4 및 0.14.0+dev에서 패치되었습니다.
💡 쉬운 설명
Gogs 서비스의 특정 엔드포인트에서 권한 확인이 제대로 작동하지 않아 읽기 전용 권한으로도 저장소 내용을 수정할 수 있는 취약점입니다. 이는 버전 0.13.3 및 이전 버전에 영향을 미칩니다. 사용자는 버전을 업데이트하여 이 문제를 해결할 수 있습니다.
🇺🇸 원문 (English)
Gogs is an open source self-hosted Git service. In version 0.13.3 and prior, the endpoint "PUT /repos/:owner/:repo/contents/*" does not require write permissions and allows access with read permission only via repoAssignment(). After passing the permission check, PutContents() invokes UpdateRepoFile(), which results in commit creation and the execution of git push. As a result, a token with read-only permission can be used to modify repository contents. This issue has been patched in versions 0.13.4 and 0.14.0+dev.
📍 영향받는 시스템
Gogs 버전 0.13.3 및 이전
⚔️ 공격 벡터
PUT /repos/:owner/:repo/contents/* 엔드포인트를 통해 읽기 전용 권한의 토큰을 사용하여 저장소 내용을 수정
🛡️ 대응 방법
Gogs를 버전 0.13.4 또는 0.14.0+dev로 업데이트합니다.
🔧 검증 코드
로컬에서 Python을 실행하고, Gogs 인스턴스 주소와 저장소 이름을 대체하여 코드를 실행합니다. 응답 코드가 200이라면 엔드포인트에 접근할 수 있으며, 버전을 확인하여 취약점 여부를 판단합니다. 이 코드는 원격 접속 없이 로컬에서 실행할 수 있으며, Gogs 인스턴스에 대한 읽기 전용 권한의 토큰을 사용하여 테스트할 수 있습니다.
python -c "import requests; response = requests.get('https://your-gogs-instance.com/api/v1/repos/your-repo/contents/'); print('PUT /repos/:owner/:repo/contents/* 엔드포인트에 대한 응답 코드:', response.status_code)"