Skip to content

v0.3.1 — TLS rule precision fix & security hardening

Latest

Choose a tag to compare

@Danny-397 Danny-397 released this 31 Oct 19:34
· 14 commits to main since this release
6be5713

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.)