aws / aws/aws-encryption-sdk-javascript
Use more privileged memory allocation for the plaintext Buffer in Decrypt
- 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