Parent: #1
Identified by: v1.0.0 pre-release security review (2026-08-22). Severity: minor — not practically exploitable, but a code/doc divergence in a documented security invariant.
Finding
The 192-char padding on the LiteNetLib NAT token is what holds the native path to the documented ≤2.0 response-byte ratio (docs/architecture/0003-state-privacy-availability-and-budgets.md, docs/contracts/udp-v1.md:51). The frozen envelope carries no such padding: an IPv4 ClientPresence envelope is ~73 bytes yet completes the same two ~217-byte introductions — ~5.9× per completing datagram, ~2.9× toward a single spoofable source (NatMediationProcessor.cs:98-139, 277-306; RendezvousUdpCodec.cs:13,56; NatPunchRequestTokenCodec.cs:50).
Not exploitable in practice: introduction is one-shot per attempt (InMemoryEphemeralRendezvousStore.cs:712-754), so every ~217 reflected bytes costs the attacker a full HTTPS join-attempt round trip — there is no usable amplifier. But the documented invariant is not what the code enforces.
Related: the amplification metric cannot detect this or any future regression — NatMediationProcessor.cs:82-88, 181-187 records response bytes as the constant 2 * ContractLimits.UdpDatagramMaxBytes rather than actual emitted bytes.
Outcome
Either pad/bound the frozen-envelope path to restore the documented ≤2.0 ratio, or amend the ADR/contract doc to state the real per-path budgets — and in both cases record actual emitted response bytes in the amplification telemetry so the budget is observable.
Acceptance criteria
Documented budget and enforced behavior agree for every UDP request path.
Amplification metrics reflect real bytes; a regression past the budget is visible in telemetry.
A test pins the worst-case response-bytes-per-request-byte ratio per path.
Parent: #1
Identified by: v1.0.0 pre-release security review (2026-08-22). Severity: minor — not practically exploitable, but a code/doc divergence in a documented security invariant.
## Finding
The 192-char padding on the LiteNetLib NAT token is what holds the *native* path to the documented ≤2.0 response-byte ratio (`docs/architecture/0003-state-privacy-availability-and-budgets.md`, `docs/contracts/udp-v1.md:51`). The frozen envelope carries no such padding: an IPv4 `ClientPresence` envelope is ~73 bytes yet completes the same two ~217-byte introductions — ~5.9× per completing datagram, ~2.9× toward a single spoofable source (`NatMediationProcessor.cs:98-139, 277-306`; `RendezvousUdpCodec.cs:13,56`; `NatPunchRequestTokenCodec.cs:50`).
Not exploitable in practice: introduction is one-shot per attempt (`InMemoryEphemeralRendezvousStore.cs:712-754`), so every ~217 reflected bytes costs the attacker a full HTTPS join-attempt round trip — there is no usable amplifier. But the documented invariant is not what the code enforces.
Related: the amplification metric cannot detect this or any future regression — `NatMediationProcessor.cs:82-88, 181-187` records response bytes as the constant `2 * ContractLimits.UdpDatagramMaxBytes` rather than actual emitted bytes.
## Outcome
Either pad/bound the frozen-envelope path to restore the documented ≤2.0 ratio, or amend the ADR/contract doc to state the real per-path budgets — and in both cases record actual emitted response bytes in the amplification telemetry so the budget is observable.
## Acceptance criteria
- Documented budget and enforced behavior agree for every UDP request path.
- Amplification metrics reflect real bytes; a regression past the budget is visible in telemetry.
- A test pins the worst-case response-bytes-per-request-byte ratio per path.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent: #1
Identified by: v1.0.0 pre-release security review (2026-08-22). Severity: minor — not practically exploitable, but a code/doc divergence in a documented security invariant.
Finding
The 192-char padding on the LiteNetLib NAT token is what holds the native path to the documented ≤2.0 response-byte ratio (
docs/architecture/0003-state-privacy-availability-and-budgets.md,docs/contracts/udp-v1.md:51). The frozen envelope carries no such padding: an IPv4ClientPresenceenvelope is ~73 bytes yet completes the same two ~217-byte introductions — ~5.9× per completing datagram, ~2.9× toward a single spoofable source (NatMediationProcessor.cs:98-139, 277-306;RendezvousUdpCodec.cs:13,56;NatPunchRequestTokenCodec.cs:50).Not exploitable in practice: introduction is one-shot per attempt (
InMemoryEphemeralRendezvousStore.cs:712-754), so every ~217 reflected bytes costs the attacker a full HTTPS join-attempt round trip — there is no usable amplifier. But the documented invariant is not what the code enforces.Related: the amplification metric cannot detect this or any future regression —
NatMediationProcessor.cs:82-88, 181-187records response bytes as the constant2 * ContractLimits.UdpDatagramMaxBytesrather than actual emitted bytes.Outcome
Either pad/bound the frozen-envelope path to restore the documented ≤2.0 ratio, or amend the ADR/contract doc to state the real per-path budgets — and in both cases record actual emitted response bytes in the amplification telemetry so the budget is observable.
Acceptance criteria