← Back to all sparks
R

Rspamd

COMMS
Velocity5.0

Fast spam filtering system for mail servers

Rspamd closed a file-read hole any TCP client could reach, and taught the PDF parser to read fonts.

spam filteringinput hardeningfuzzy matchingpdf extractionneural registriesdeprecation path
Current state
Rspamd's 4.1.x line is running two tracks at once: extending the neural and fuzzy subsystems it rebuilt earlier in the cycle, and auditing its own attack surface. 4.1.5 continues both — fuzzy storages now receive sender authentication facts over encrypted rules, the PDF parser decodes text through font encodings and ToUnicode CMaps, and the protocol gates File, Path and Shm message sources that any TCP client could previously use to have arbitrary files parsed. That gate ships as an opt-out now and an opt-in later.
Where it's heading
Every release in this window has carried at least one security fix in the same class: a controller accepting any password on a malformed hash, a DKIM out-of-bounds read, MIME recursion depth, and now unauthenticated file reads. The project is systematically walking its own input paths rather than reacting to individual reports. Alongside it, the fuzzy subsystem keeps gaining structure — diagnostics, persisted shingle sets, and now shared sender reputation signals — turning what was a hash-match check into a scored, introspectable component.
Prediction
The stated plan to flip allow_file_and_shm_inputs to false in the next major release makes that the visible breaking change to prepare for. Expect the fuzzy work to keep consolidating, since sharing SPF, DKIM and DMARC state with storages sets up cross-sender scoring that the current per-hash matching cannot express.

Recent moves

  1. 3d ago

    Closes an arbitrary file read reachable by any TCP client

    Continues the input-hardening pass that has run through every 4.1.x release, this time gating File, Path and Shm message sources behind a flag that defaults on now and off in the next major — a deliberate deprecation path rather than a silent break. The fuzzy subsystem gains sender authentication facts shared with storages, and the PDF parser learns font-aware decoding, both extending components rebuilt earlier in the cycle.

    View source ↗
  2. 20d ago

    Controller accepted any password on a malformed hash

    A critical authentication fix — the controller failed open on a malformed password hash — alongside regexp engine bounds and a jemalloc linking change that stops startup segfaults. Part of the same walk through input paths that 4.1.5 continues.

    View source ↗
  3. 24d ago

    Fuzzy diagnostics API, and jQuery dropped from the WebUI

    Fuzzy matching gains structured results, a diagnostics API and a probability weight curve, making the subsystem introspectable rather than a yes/no check — groundwork the sender-facts sharing in 4.1.5 builds on. The WebUI drops jQuery and Font Awesome entirely, and a DKIM out-of-bounds read is fixed.

    View source ↗
  4. 28d ago

    Static embedding neural provider and composite Lua conditions

    The first real tenant of the neural registry introduced in 4.1.1: a static_embed provider with a WordPiece tokenizer, plus training controls to stop automatic learning. Security fixes bound MIME recursion depth and a short-nonce out-of-bounds read, and alias rewriting stops corrupting DMARC and SPF evaluation.

    View source ↗
  5. 2mo ago

    Pluggable neural feature and architecture registries

    ⚡ SPARK

    Pluggable feature-provider and ANN-architecture registries turn the neural plugin from a fixed classifier into a framework, with multi-head attention pooling and graph transforms available to whatever is registered. The CSS module also learns more text-hiding tricks, and zip-bomb expansion gains opt-in limits.

    View source ↗
  6. 2mo ago

    Load-aware upstream selection and chain-aware URL resolution

    The 4.1.0 base release, bringing Power of Two Choices upstream selection with latency tracking and a chain-aware url_redirector cache. It set the pattern the rest of the line follows: substantial subsystem work paired with incompatible changes flagged up front.

    View source ↗