The access log records the proxy's address, never the client's, so abuse cannot be traced from webhooker's own logs #270
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by a TLS deployment audit running real nginx in front of the app.
With
TRUSTED_PROXIES=127.0.0.1/32correctly set, and the rate limiter demonstrably keying on the true client address, every access log line still reads"remoteIP":"127.0.0.1".Verified: two genuinely distinct clients (
172.17.0.2and172.17.0.3, separate containers) hammered the receiver into429.grep '"remoteIP"' | sort | uniq -creturned15 "remoteIP":"127.0.0.1"— the proxy, every time. Rate-limit rejection lines carry no client identity at all, and the CSRF-failure WARN'sremote_addris likewise the proxy.So the app already computes the real client address for rate limiting and then throws it away before logging. In the deployed shape, abuse forensics from webhooker's own logs are impossible: an operator seeing a flood of 429s cannot tell whether it is one attacker or a thousand.
Mitigated because nginx's own access log has the client IP — but correlating the two requires the operator to configure and log
X-Request-Id, which the README never mentions. Not milestoned: the information exists at the proxy, so this is a convenience and forensics gap rather than a hole.Definition of done:
TRUSTED_PROXIESis set correctly — an attributed address derived from an untrustedX-Forwarded-Foris attacker-controlled and must not be presented as authoritative.