Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
gitea-follow-existence — Demonstrates a Gitea account-enumeration oracle: authenticated PUT /api/v1/user/following/{username} returns 204 for hidden accounts and 404 for unknown names, with a loopback lab. | Kitploit
Tools/GitHubGitHub/abraxas/gitea-follow-existence
ReconnaissanceVulnerability AnalysisExploitationInformation GatheringWeb SecurityPenetration TestingAPI SecurityLabs & Practice

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
GitHub
abraxas/gitea-follow-existence

gitea-follow-existence

Demonstrates a Gitea account-enumeration oracle: authenticated PUT /api/v1/user/following/{username} returns 204 for hidden accounts and 404 for unknown names, with a loopback lab.

View Repository
515 days agoNot yet reviewed

Abraxas Labs - gitea-follow-existence

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitea-follow-existence

gitea-follow-existence

Gitea 1.27.3 - Gitea

GetInfo already 404s hidden users and lies about why: fake ErrUserNotExist error message to not leak information about existence. PUT /user/following/{username} loads the target with UserAssignmentAPI() and calls Follow. No IsUserVisibleToViewer. Missing name: 404 user redirect does not exist. Hidden name that exists: 204.

204 means the account exists. 404 means you guessed a name that is not there. The profile JSON stays closed.

IDno CVE yet
CWECWE-203
CVSSMedium: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
ProductGitea
Affectedthrough v1.27.3 (146cc3e)
Authsigned-in account
LicenseGNU Affero GPL v3.0
Lab127.0.0.1 only

What an attacker can do

Sign in (default open registration is cheap). Prove a hidden or limited account exists even when the profile API 404s. No profile dump. No private git. Combined with unauth stargazers, you can find a hidden login on a public repo and then confirm it still exists after they hide the profile.

Check and Unfollow sit on the same group. Same missing check.

How I found it

Same visibility pass as stargazers. When a handler works that hard to lie, you look at every other route that takes {username}. Follow does not.

I registered a restricted attacker, followed the hidden name, followed a name that does not exist, and compared status codes. Public users are supposed to 204. That is not SUCCESS. Hidden 204 vs unknown 404 while GET is 404 is SUCCESS.

Wrong turns already recorded: Follow hidden returning 404 (then visibility is on this route); profile JSON for the hidden user (GetInfo already 404s - this bug is status class, not a dump); treating Follow 204 on a public user as SUCCESS; a reverse shell. Theatre.

Lab

cd lab
./run.sh

Target only http://127.0.0.1:18134. Compose allows public,limited,private visibility.

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

The fix

Call IsUserVisibleToViewer in Follow (and Check/Unfollow) before FollowUser. Hidden names must 404 the same way GetInfo already does.

References

  • github.com/go-gitea/gitea tag v1.27.3
  • follower.go · api.go following group · GetInfo
  • Same tag: gitea-stargazers-hidden
  • CWE-203

License

GNU Affero GPL v3.0. See LICENSE. Loopback lab only. No warranty.

Download Tool