harden: validate PE output and timestamp tokens - #4
Conversation
|
This is good work — all three items I asked for, and the excluded list matches exactly what I said I didn't want to take. Thanks for keeping the scope tight. The atomic write path is solid. Creating the temp with Two things. The bounds check is stricter than it needs to be when the table is empty. It runs before the branch that special-cases a zero-length table: if l.cert_table_off > pe.len() || cert_end > pe.len() { bail!(...) }
let (cert_start, cert_end) = if l.cert_table_size == 0 {
(pe.len(), pe.len()) // offset is not used here
} else { ... };With The Windows Minor, take it or leave it: there's no directory fsync after the rename. That doesn't affect the failure you're fixing (a process dying mid-write), only durability across a power loss. Fix the first point and I'll merge this. |
CI : ajout de --workspace à clippy et cargo test. Sans lui, le CI ne lançait qu'UN test (celui du binaire) et n'a jamais exécuté les 16 tests de ssign-core — y compris ceux ajoutés par #3 et #4. Clippy ne lintait pas non plus ssign-core. --all-targets sur clippy pour couvrir les tests. Secrets : la graine TOTP et le code sont désormais portés par Zeroizing<String> et effacés à leur libération ; les copies laissées par clap sont effacées dès que le secret est repris. Limite documentée dans le code : cela ne couvre pas ce qui précède main (argv et environ restent lisibles dans /proc), d'où le conseil de préférer les variables d'environnement. Contenu de la release, via #3 et #4 : - signature cloud sélectionnée sur le digest exact demandé, comparaison insensible à la casse (le contrat de l'API porte sur du hex, pas sur une casse) ; - table de certificats PE bornée, sans rejeter un offset résiduel quand la table est vide ; - validation structurelle CMS du token d'horodatage avant intégration ; - écriture atomique des sorties : fichier temporaire O_EXCL dans le même répertoire, sync, permissions préservées, remplacement atomique, et refus d'écraser un .orig existant. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0138mtPxwfXPetBypyjp6KwU
What changed
Explicitly excluded
No timestamp transport-policy change: no --allow-insecure-timestamp, HTTP rejection, Content-Type enforcement, CI, or documentation changes.