fix(auth): harden Windows storage bridge

This commit is contained in:
2026-08-16 22:16:13 +02:00
parent c9b02fc57e
commit 7d9ca13f1d
12 changed files with 473 additions and 29 deletions
+7 -2
View File
@@ -3,6 +3,7 @@
package authstorage
import (
"bytes"
"context"
"encoding/base64"
"encoding/json"
@@ -60,7 +61,11 @@ func Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.
if err := ctx.Err(); err != nil {
return fail(stderr)
}
decoder := json.NewDecoder(io.LimitReader(stdin, maximumProtocolBytes+1))
payload, err := io.ReadAll(io.LimitReader(stdin, maximumProtocolBytes+1))
if err != nil || len(payload) > maximumProtocolBytes {
return fail(stderr)
}
decoder := json.NewDecoder(bytes.NewReader(payload))
decoder.DisallowUnknownFields()
var input request
if err := decoder.Decode(&input); err != nil {
@@ -229,7 +234,7 @@ func createPrivate(directory, filename string, contents []byte) (bool, error) {
} else if !errors.Is(err, os.ErrNotExist) {
return false, errInvalid
}
if err := safeio.WriteCanonicalNewFile(path, contents, 0o600); err == nil {
if err := safeio.WriteCanonicalNewPrivateFile(path, contents, 0o600); err == nil {
return true, nil
}
if safeio.ValidatePrivateRegular(path) == nil {