- Status Closed
-
Assigned To
cbay - Private
Opened by zchill - 10.09.2026
Last edited by cbay - 11.09.2026
FS#475 - Regression: unauthenticated SQL query and database error disclosure via the getfile parameter on sec
Asset: https://security.alwaysdata.com/?getfile=<value>
Refs: regression of FS#465 (closed as Fixed 31.08.2026)
Class: CWE-209, error message containing sensitive information, reported at the disclosure stage per the program's SQLi guidance
CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N (5.3, Medium)
Observed: 10 September 2026, unauthenticated, reproduced three times with different values
Summary
The getfile parameter returns the full SQL query text and the raw PostgreSQL error, including the value I submitted echoed back, to any unauthenticated visitor. This is the identical disclosure that FS#465 reported and that you closed as Fixed on 31 August 2026. It is live again. FS#466 from the same close date is also live again, and both bugs sit on a document root dated 13 July 2026, so this looks like one rollback event rather than two coincidental regressions. I am reporting it separately because it is its own fix, and cross-referencing the .git report which carries the deployment analysis.
Reproduction
Plain curl, no cookies, no authentication.
Step 1. Trigger the error with a single quote.
$ curl -s "https://security.alwaysdata.com/?getfile=1%27"
Query {SELECT t.project_id,
a.orig_name, a.file_name, a.file_type, t.*
FROM "flyspray_attachments" a
INNER JOIN "flyspray_tasks" t ON a.task_id = t.task_id
WHERE attachment_id = ?} with params {1'} failed! (ERROR: invalid input syntax for type integer: "1'"
CONTEXT: unnamed portal parameter $1 = '...')
Step 2. Repeat with a different value to show the response is generated live, not a cached page.
$ curl -s "https://security.alwaysdata.com/?getfile=7%27"
... WHERE attachment_id = ?} with params {7'} failed! (ERROR: invalid input syntax for type integer: "7'"
CONTEXT: unnamed portal parameter $1 = '...')
Step 3. Response headers for the first request.
HTTP/2 200 server: Apache content-type: text/html; charset=utf-8 via: 2.0 alproxy
The error page is returned with HTTP 200, no authentication, no referer, no special headers.
What this discloses
1. The exact query shape: table and column names (flyspray_attachments, flyspray_tasks, the attachment columns) and the join between them.
2. The database backend and its error format (PostgreSQL, portal parameters), and that the application surfaces database layer text straight to the client.
3. An input echo channel: my submitted value comes back inside the error, which is a reliable oracle when probing how other parameters reach the query layer.
I want to be precise about what I am not claiming: the visible sink binds the parameter (the placeholder with a typed cast error), so I am not reporting a proven injectable point at getfile. I am reporting it at exactly the stage your program rules ask for, a SQL error that indicates the query handling, the same stage FS#465 was accepted at. Whether any code path feeding attachment_id can be pushed further is for your analysis, and I have deliberately not tried.
Impact
On its own this is a reconnaissance aid, but it sits on the same host as the concurrently re-exposed .git directory, where an attacker already gets the complete file map. Query and schema disclosure to unauthenticated users lowers the cost of targeting the tracker's database layer, and the acceptance and fix of FS#465 shows you agree this class matters on this host.
Suggested fix
1. Restore the FS#465 fix on the current deployment.
2. Send database exceptions to the log and render a generic error page, so the class stays closed across future redeploys.
3. Add the deployment assertion suggested in the .git report; it covers this regression too.
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 would be an issue in Flyspray, I suggest you report it to them. It's out of our scope.
Kind regards,
Cyril