
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 |
| Product | Gitea |
| Affected | v1.27.3 (146cc3e) まで |
| Auth | サインイン済みアカウント |
| License | GNU Affero GPL v3.0 |
| Lab | 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 group · GetInfoGNU Affero GPL v3.0。LICENSE を参照。ループバックラボのみ。保証なし。