You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed
TLS 1.0/1.1 no longer flags the flags that turn them off. The rule matched SSLv3 / TLSv1 inside disable flags (OP_NO_SSLv3, OP_NO_TLSv1, _OP_NO_SSLv2_OR_SSLv3), which are the mitigation, not exposure; in a random
sample of real-world findings every TLS 1.0 hit was one of these. The protocol
name must now start its own token. Explicit selectors (PROTOCOL_TLSv1, SSLv3_METHOD, TLSVersion.TLSv1) still fire, and TLSVersion.TLSv1_1, which
was missed before, is now caught.
Added
Precision on real code (benchmark/precision_sample.py): 100 findings drawn
at random from 37 pinned PyPI packages and labeled by hand — 93% (95% CI
86–97%), measured before the TLS fix. A measured Semgrep row in the comparison.
Security
Rate limits are per visitor. The limiter keyed on the socket address, and
behind Render's proxy that is the same for everyone, so every limit was
site-wide: 20 logins and 5 password resets per hour for all users together, and
one person retrying could lock everyone out. Keyed on CF-Connecting-IP
(Render serves through Cloudflare, which overwrites it), falling back to the
socket address locally.
Password-reset links are single-use. A link carried only the user id and
stayed valid for its whole hour, including after it had been used. It now
carries a fingerprint of the password hash it was issued against, so it stops
verifying once the password changes.
Zip bombs are refused before extraction. The 25 MB limit was on the
compressed upload; an archive declaring more than 250 MB uncompressed or more
than 20,000 files is now rejected before anything is written.
Oversized uploads are refused at the door (MAX_CONTENT_LENGTH, JSON 413)
instead of being written to disk before the size check.
The API refuses to start on Render with the public default secret, which
would let anyone forge sign-in and reset tokens. (Production was checked and
is not affected; this guards future deploys.)