aws / aws/aws-encryption-sdk-javascript

Use more privileged memory allocation for the plaintext Buffer in Decrypt

Offen
#1,173 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
enhancement
Vorherrschende Sprache
TypeScript
Sterne
260
Forks
68
Ø Merge
22 Std. 19 Min.
Gemergte PRs (30 T.)
2

Beschreibung

### Problem:
[https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/decrypt-node/src/decrypt.ts](url)
```javascript
const plaintext: Buffer[] = []
let messageHeader: MessageHeader | false = false
stream
.once('MessageHeader', (header: MessageHeader) => {
messageHeader = header
})
.on('data', (chunk: Buffer) => plaintext.push(chunk))

// This will check both Uint8Array|Buffer
if (ciphertext instanceof Uint8Array) {
stream.end(ciphertext)
} else if (typeof ciphertext === 'string') {
stream.end(Buffer.from(ciphertext, encoding))
} else if (ciphertext.readable) {
ciphertext.pipe(stream)
} else {
throw new Error('Unsupported ciphertext format')
}

await finishedAsync(stream)
if (!messageHeader) throw new Error('Unknown format')

return {
plaintext: Buffer.concat(plaintext),
messageHeader,
}
```

The `Buffer.concat(plaintext)` will result in a new Buffer. However, the `const plaintext: Buffer[] = []` seem not zero-out where sensitive data might remain in memory until gc.

[//]: # (NOTE: If you believe this might be a security issue, please email aws-security@amazon.com instead of creating a GitHub issue. For more details, see the AWS Vulnerability Reporting Guide: https://aws.amazon.com/security/vulnerability-reporting/ )

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit modules/decrypt-node/src/decrypt.ts und untersuche, wie Klartext-Chunks gesammelt und durch Buffer.concat kombiniert werden. Bestimme, was privilegierte Allokation für diesen Node.js-Entschlüsselungspfad bedeutet und wie sensible Daten vor der Garbage Collection behandelt werden sollten. Die fertige Änderung sollte das gemeldete Problem mit der Lebensdauer des Klartext-Puffers beheben, ohne das Entschlüsselungsergebnis zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
node.js, typescript
Bereich
security
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.