
Gitea 계정 열거 오라클을 시연합니다: 인증된 PUT /api/v1/user/following/{username}은 숨겨진 계정에 대해 204를, 알 수 없는 이름에 대해 404를 반환하며, 루프백 랩을 포함합니다.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-follow-existence
Gitea 1.27.3 - Gitea
GetInfo는 이미 숨겨진 사용자에게 404를 반환하면서 그 이유에 대해 거짓말을 합니다: fake ErrUserNotExist error message to not leak information about existence. PUT /user/following/{username}은 UserAssignmentAPI()로 대상을 로드하고 Follow를 호출합니다. IsUserVisibleToViewer가 없습니다. 존재하지 않는 이름: 404 user redirect does not exist. 존재하는 숨겨진 이름: 204.
204는 계정이 존재함을 의미합니다. 404는 존재하지 않는 이름을 추측했음을 의미합니다. 프로필 JSON은 닫힌 상태로 유지됩니다.
| ID | 아직 CVE 없음 |
| CWE | CWE-203 |
| CVSS | Medium: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N |
| 제품 | Gitea |
| 영향 범위 | v1.27.3 (146cc3e)까지 |
| 인증 | 로그인된 계정 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
로그인합니다(기본 공개 가입은 저렴합니다). 프로필 API가 404를 반환하더라도 숨겨진 또는 제한된 계정이 존재함을 입증합니다. 프로필 덤프는 없습니다. 비공개 git도 없습니다. 비인증 stargazers와 결합하면, 공개 저장소에서 숨겨진 로그인을 찾은 다음 그들이 프로필을 숨긴 후에도 여전히 존재하는지 확인할 수 있습니다.
Check와 Unfollow는 같은 그룹에 있습니다. 동일한 검사 누락입니다.
stargazers와 동일한 가시성 점검입니다. 핸들러가 그렇게까지 거짓말을 하려고 애쓴다면, {username}을 받는 다른 모든 라우트를 살펴봅니다. Follow는 그렇지 않습니다.
제한된 공격자 계정을 등록하고, 숨겨진 이름을 팔로우하고, 존재하지 않는 이름을 팔로우한 다음, 상태 코드를 비교했습니다. 공개 사용자는 204를 반환해야 합니다. 그것은 SUCCESS가 아닙니다. GET이 404인데 숨겨진 이름은 204, 알 수 없는 이름은 404인 것이 SUCCESS입니다.
이미 기록된 잘못된 방향: 숨겨진 이름에 대한 Follow가 404를 반환함(그렇다면 이 라우트에 가시성이 있음); 숨겨진 사용자에 대한 프로필 JSON(GetInfo는 이미 404를 반환함 - 이 버그는 상태 클래스 문제이지 덤프가 아님); 공개 사용자에 대한 Follow 204를 SUCCESS로 취급함; 리버스 셸. 연극일 뿐입니다.
cd lab
./run.sh
대상은 오직 http://127.0.0.1:18134입니다. Compose는 public,limited,private 가시성을 허용합니다.
get-hidden status=404
follow-hidden status=204
follow-unknown status=404 user redirect does not exist
oracle hidden=204 unknown=404
SUCCESS GITEA-FOLLOW-ORACLE
FollowUser 전에 Follow(그리고 Check/Unfollow)에서 IsUserVisibleToViewer를 호출하세요. 숨겨진 이름은 GetInfo가 이미 그러하듯이 동일하게 404를 반환해야 합니다.
follower.go · api.go following 그룹 · GetInfoGNU Affero GPL v3.0. LICENSE를 참조하세요. 루프백 랩 전용. 보증 없음.