Skip to content

Commit 2384340

Browse files
committed
fix(posixage): zero sensitive byte slices after use
Clear decryption key material and plaintext secret bytes immediately after use via defer clear(), so they don't linger in the heap longer than necessary. Signed-off-by: Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
1 parent 0e3df52 commit 2384340

2 files changed

Lines changed: 5 additions & 0 deletions

File tree

store/posixage/prompt.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ func promptForEncryptionKeys(ctx context.Context, funcs []promptCaller) (map[sec
105105
return nil, err
106106
}
107107
raw = bytes.TrimSpace(raw)
108+
defer clear(raw)
108109
if len(raw) == 0 {
109110
return nil, errors.New("empty key provided on registered callback function")
110111
}

store/posixage/store.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ func (f *fileStore[T]) decryptSecret(ctx context.Context, encryptedSecrets []sec
138138
if err != nil {
139139
return nil, err
140140
}
141+
defer clear(decryptionKey)
141142

142143
identity, err := secretfile.GetIdentity(keyType, string(decryptionKey))
143144
if err != nil {
@@ -214,6 +215,7 @@ func (f *fileStore[T]) Filter(ctx context.Context, pattern store.Pattern) (map[s
214215
if err != nil {
215216
return err
216217
}
218+
defer clear(decryptedSecret)
217219

218220
secret := f.factory(ctx, id)
219221
if err := secret.SetMetadata(metadata); err != nil {
@@ -254,6 +256,7 @@ func (f *fileStore[T]) Get(ctx context.Context, id store.ID) (store.Secret, erro
254256
if err != nil {
255257
return nil, err
256258
}
259+
defer clear(decryptedSecret)
257260

258261
secret := f.factory(ctx, id)
259262
if err := secret.SetMetadata(metadata); err != nil {
@@ -339,6 +342,7 @@ func (f *fileStore[T]) Save(ctx context.Context, id store.ID, s store.Secret) er
339342
if err != nil {
340343
return err
341344
}
345+
defer clear(secret)
342346
metadata := s.Metadata()
343347

344348
var secrets []secretfile.EncryptedSecret

0 commit comments

Comments
 (0)