- Status Closed
-
Assigned To
cbay - Private
Opened by ahmedsss2233 - 09.05.2026
Last edited by cbay - 11.05.2026
FS#337 - [ALW-001] Flyspray .git Directory Fully Exposed on security.alwaysdata.com
Severity: HIGH
Target: security.alwaysdata.com
Affected URL: https://security.alwaysdata.com/.git/
## Description
The deployed Flyspray instance (this very bug-tracker) exposes its entire `.git` directory under the document root. The directory listing is disabled, but the well-known internal files are individually readable, which is enough to reconstruct the full source tree, every commit message, every author email, and every credential ever committed to the repository. (Title shortened from "…Source Tree, Admin Email, Commit History" — the original 117-char summary exceeded the 100-char column limit and triggered an INSERT error.)
## Steps to Reproduce (manual, no scanner)
```
curl -s https://security.alwaysdata.com/.git/HEAD curl -s https://security.alwaysdata.com/.git/config curl -s https://security.alwaysdata.com/.git/logs/HEAD curl -s https://security.alwaysdata.com/.git/index -o /tmp/index ; file /tmp/index
```
`HEAD` returns the current branch ref, `config` returns the repository configuration, and `logs/HEAD` returns the full reflog including author names and emails. From there, `git clone` against the exposed directory or a manual `git-cat-file` walk reconstructs ~941 reachable objects and the complete deployed source code (including any locally-applied patches).
## Impact
* Full source-code disclosure of the production Flyspray that hosts the bug-bounty program itself.
* Disclosure of admin / committer email addresses and real names from commit metadata.
* Any secret accidentally committed (DB credentials, API tokens, signing keys) is recoverable from history even if removed from `HEAD`.
* Combined with ALW-007 (no rate-limiting on the Flyspray login) and ALW-015 (weak integer CSRF), this gives an attacker a precise roadmap to compromise the bug-bounty intake and read every other researcher's unredacted submissions.
## Remediation
Block the directory at the web server level, e.g. for Apache:
```
<DirectoryMatch "/\.git">
Require all denied
</DirectoryMatch>
```
or for nginx:
```
location ~ /\.git { deny all; return 404; }
```
Then remove the `.git` directory from the document root entirely and deploy via a build artifact or `git archive` rather than a working copy.
— Reported by: Ahmed Said (asame8855@gmail.com)
Tested manually per program rules — no automated scanners used.
Loading...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Add new task
- Alt + ⇧ Shift + m My searches
- Alt + ⇧ Shift + t focus taskid search
Tasklist
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Next task
- p Previous task
- Alt + ⇧ Shift + e ↵ Enter Edit this task
- Alt + ⇧ Shift + w watch task
- Alt + ⇧ Shift + y Close Task
Task Editing
- Alt + ⇧ Shift + s save task
Hello,
That repository is public anyway, so there's no vulnerability here.
Kind regards,
Cyril