- Timestamp:
- 08/19/2026 07:44:50 PM (3 weeks ago)
- Branches:
- main
- Children:
- 598f090
- Parents:
- 5869b1f
- git-author:
- Robin <roboburr@…> (08/19/2026 07:30:37 PM)
- git-committer:
- Robin <roboburr@…> (08/19/2026 07:44:50 PM)
- Location:
- test
- Files:
-
- 1 added
- 1 edited
-
openwebauth.test.js (modified) (2 diffs)
-
owa-decrypt-v15.test.js (added)
Legend:
- Unmodified
- Added
- Removed
-
test/openwebauth.test.js
r5869b1f r58cad21 74 74 assert.ok(!/[+/]/.test(versleuteld), 'en URL-veilig'); 75 75 76 const terug = crypto.privateDecrypt( 77 { key: privateKey, padding: crypto.constants.RSA_PKCS1_PADDING }, 78 Buffer.from(versleuteld.replace(/-/g, '+').replace(/_/g, '/'), 'base64'), 79 ).toString('utf8'); 76 // Door ONZE eigen uitpakker, niet rechtstreeks door crypto.privateDecrypt: 77 // die weigert PKCS#1 v1.5 sinds de mitigatie voor CVE-2023-46809, en de 78 // revert-vlag bestaat alleen op Node 18/20/21 -- allemaal EOL. decryptToken 79 // haalt het omhulsel zelf af en werkt dus op een Node die nog leeft. 80 const terug = OWA.decryptToken(versleuteld, privateKey.export({ type: 'pkcs8', format: 'pem' })); 80 81 assert.equal(terug, token); 81 82 … … 83 84 // de voor de hand liggende toets (assert.throws) is hier fout. 84 85 // 85 // PKCS#1 v1.5 gooit bij een verkeerde sleutel geen fout: OpenSSL 3 doet aan 86 // "implicit rejection" en geeft afgeleide onzin terug in plaats van te falen, 87 // juist zodat een aanvaller niet aan het foutgedrag kan aflezen of zijn gok 88 // klopte (Bleichenbacher/Marvin). Gemeten: 200 vreemde sleutels, 0 fouten, 89 // 200 keer bytes -- en 0 keer het token. 86 // Bij een verkeerde sleutel hoort er geen FOUT te komen maar afgeleide onzin: 87 // implicit rejection. Anders leest een aanvaller aan het foutgedrag af of zijn 88 // gok klopte (Bleichenbacher/Marvin). 89 // 90 // LET OP waar dat vandaan komt. OpenSSL doet dit pas zelf vanaf 3.2; op 3.0.19 91 // -- wat Node 20 meebrengt en wat wij draaien -- WERPT hij gewoon. Gemeten op 92 // 19-8-2026. Een eerdere versie van deze test ging uit van OpenSSL's gedrag en 93 // was daarmee afhankelijk van welke Node de meting toevallig deed. Nu maakt 94 // decryptToken de implicit rejection ZELF, dus de eigenschap staat vast 95 // ongeacht de OpenSSL eronder. 90 96 // 91 97 // De eigenschap die telt is dus niet "het knalt" maar "er komt iets anders 92 98 // uit". Wat de home instance daarna terugstuurt matcht geen enkel opgeslagen 93 99 // token, en de inlog mislukt gewoon. 94 const ruw = Buffer.from(versleuteld.replace(/-/g, '+').replace(/_/g, '/'), 'base64');95 100 for (let i = 0; i < 5; i++) { 96 const vreemde = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 }).privateKey; 101 const vreemde = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 }) 102 .privateKey.export({ type: 'pkcs8', format: 'pem' }); 97 103 let uit = null; 98 try { 99 uit = crypto.privateDecrypt({ key: vreemde, padding: crypto.constants.RSA_PKCS1_PADDING }, ruw).toString('utf8'); 100 } catch { uit = null; } // een fout mag, maar is niet de regel 104 assert.doesNotThrow(() => { uit = OWA.decryptToken(versleuteld, vreemde); }, 105 'werpen is het signaal waar Bleichenbacher op draait'); 101 106 assert.notEqual(uit, token, 'andermans sleutel levert nooit het token'); 102 107 }
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)