aws / aws/aws-encryption-sdk-javascript

Use more privileged memory allocation for the plaintext Buffer in Decrypt

Ouverte
#1,173 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
TypeScript
Étoiles
260
Forks
68
Merge moyen
22 h 19 min
PR mergées (30 j)
2

Description

### 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/ )

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par modules/decrypt-node/src/decrypt.ts et examinez comment les fragments de texte en clair sont collectés et combinés par Buffer.concat. Déterminez ce que signifie l’allocation privilégiée pour ce chemin de déchiffrement Node.js et comment les données sensibles doivent être traitées avant le garbage collection. La modification finale doit résoudre le problème signalé concernant la durée de vie du tampon de texte en clair sans modifier le résultat du déchiffrement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
node.js, typescript
Domaine
security
Type d'issue
Bug
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.