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
- Pepper: implement custom Debug that redacts secret bytes instead of
deriving Debug which would leak pepper material in logs/panics
- Error body OOM: use read_response_bounded() for error paths in
fullnode.rs (view_bcs and handle_response_static) instead of
unbounded response.text().await
- Codegen sanitization: apply sanitize_abi_string() to all remaining
ABI-derived values (header, MODULE_ADDRESS/MODULE_NAME constants,
function_id format strings, event type constants, is_module_event)
- URL redaction: fix over-redaction by only checking for '?' within
the URL token itself, not anywhere in the message
- Tests: add 5 unit tests for read_response_bounded() covering normal,
oversized Content-Length, oversized body, exact limit, and empty
- SECURITY_AUDIT.md: update report to reflect streaming body reads
Co-authored-by: Cursor <cursoragent@cursor.com>
**Status:** All findings remediated (21 of 22 fixed; F-21 deferred as large effort)
6
+
**Status:** All findings remediated (21 of 22 fixed; F-21 deferred as large effort). Response body reads now use incremental streaming with size limits (`read_response_bounded`) to prevent OOM from chunked transfer-encoding.
7
7
8
8
---
9
9
@@ -353,7 +353,7 @@ The SDK operates with the following trust boundaries:
353
353
354
354
### 3b. Missing Hardening
355
355
356
-
1.**Response body streaming** -- All response reads load full bodies into memory. No streaming with incremental size checks. (Addresses F-02, F-03, F-17)
356
+
1.**Response body streaming** -- All response reads now use `read_response_bounded()` which pre-checks `Content-Length` and reads incrementally via `response.chunk()`, aborting early if the size limit is exceeded. Error body reads are also bounded. (Addresses F-02, F-03, F-17)
357
357
2.**Constant-time operations** -- Signature verification delegates to underlying crates (ed25519-dalek, k256, p256) which use constant-time comparison. The SDK itself does not perform any custom constant-time operations, which is correct.
358
358
3.**Fuzz testing** -- Infrastructure exists but is unused (F-21).
359
359
4.**Side-channel resistance** -- Signing operations use library implementations with side-channel resistance. Non-security-critical operations (address parsing, ABI processing) are not constant-time, which is acceptable.
0 commit comments