
인증되지 않은 Gitea 정보 노출에 대한 개념 증명 및 실습 환경: stargazers 및 watchers API가 프로필 엔드포인트에서 숨기는 사용자 이름을 유출합니다.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-stargazers-hidden
Gitea 1.27.3 - Gitea
제한 및 비공개 사용자는 익명 조회자에게 보이지 않아야 합니다. GetInfo는 이미 해당 사용자에게 404를 반환합니다. 팔로워 목록은 이미 SQL에서 isUserVisibleToViewerCond를 적용합니다. GetStargazers는 가시성 필터 없이 star에 대한 조인입니다. ListStargazers는 그런 다음 전부를 convert.ToUser합니다. ListSubscribers는 watcher에 대해 동일한 형태입니다.
로그인하지 않고도, 공개 저장소의 stargazers JSON은 GET /users/{name}이 숨기는 사용자 이름을 알려줍니다.
| ID | 아직 CVE 없음 |
| CWE | CWE-200 |
| CVSS | Medium: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N |
| Product | Gitea |
| Affected | v1.27.3 (146cc3e)까지 |
| Auth | 인증되지 않음 |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 전용 |
로그인하지 않고, 공개 저장소의 stargazers와 watchers를 읽고 GET /users/{name}이 숨기는 사용자 이름을 알아낼 수 있습니다. 이는 공개된 무언가에 star를 누르거나 watch한 제한 및 비공개 계정에 대한 정찰입니다: 검색에 나타나지 않도록 가시성을 설정한 후에도 어쨌든 star를 클릭한 사람들입니다.
이것은 사용자 이름이며, 이메일도, 비공개 git 읽기도, RCE도 아닙니다. Follow 204 vs 404 오라클과 결합하면, 프로필이 404를 반환하더라도 숨겨진 로그인이 존재함을 확인할 수 있습니다.
가시성은 1.27.3 GHSA 물결의 주제였습니다. 제품이 의도적으로 프로필에 404를 반환할 때, 다음 질문은 어떤 목록 엔드포인트가 여전히 해당 조건 없이 user를 조인하는가입니다. Stars와 watchers가 그렇습니다.
hidstar를 limited로 심고, 공개 저장소에 star와 watch를 하고, 토큰 없이 인스턴스를 공격했습니다. Unauth GET /api/v1/users/hidstar는 404입니다. Unauth stargazers JSON에는 hidstar가 포함됩니다. Unauth watchers에는 hidstar가 포함됩니다. Unauth followers HTML에는 없습니다. 프로필은 부끄러워합니다. star 테이블은 그렇지 않습니다.
이미 기록된 잘못된 방향: unauth GET /users/hidstar가 200을 반환(그러면 가시성이 완전히 꺼진 것 - lab은 404를 요구); followers HTML에 hidstar가 나열됨(그 경로는 이미 조건을 적용); /stargazers에서 공개 이름만 있는 200을 SUCCESS로 취급; 리버스 셸. 연극. 누출은 JSON에 있는 limited 로그인입니다.
cd lab
./run.sh
오직 http://127.0.0.1:18133만 대상으로 합니다. Compose는 public,limited,private 가시성을 허용하고 stars를 켜둡니다.
unauth-user-get status=404
unauth-stargazers status=200 stargazer-names=['hidstar']
unauth-watchers leak=True
unauth-followers-web limited-in-html=False
SUCCESS GITEA-STARGAZERS-HIDDEN
GetStargazers / GetRepoWatchers에 isUserVisibleToViewerCond를 적용하세요. Unauth stargazers와 watchers는 followers가 이미 하는 것과 같은 방식으로 hidstar를 생략해야 합니다.
star.go 라우터 · star.go 모델 · subscriber.go · GetInfo · GetUserFollowersGNU Affero GPL v3.0. LICENSE 참조. 루프백 lab 전용. 보증 없음.