Doesn't HPKP become useless after the max age has expired?
Sì, dopo che è stato raggiunto il timeout, il pin non è più efficace. Ma l'aspettativa è che alla fine visiterai nuovamente la pagina prima che il tuo pin scada, aggiornando di nuovo il timeout e aggiornando i pin. Può essere pericoloso non lasciare mai scadere uno spillo perché potresti bloccare per sempre gli utenti precedenti se accidentalmente ti lasciano pin la chiave sbagliata solo una volta.
Isn't it obvious that an attacker will wait until their max age is expired and then perform the attack?
Un tale aggressore deve essere molto paziente e fare alcune supposizioni. La vittima potrebbe non visitare il sito regolarmente poiché ciò prolungherebbe il timeout di ciascuna visita. Inoltre, l'attacco deve essere ancora fattibile dopo tale orario. Due mesi possono essere lunghi perché una violazione della CA non venga rilevata.
In definitiva è un compromesso che RFC 7469 ("Estensione Pinning chiave pubblica per HTTP") spiega nella sezione su Considerazioni sulla sicurezza :
4.1. Maximum max-age
[...] There is a security trade-off in that low maximum
values provide a narrow window of protection for users who visit the
Known Pinned Host only infrequently, while high maximum values might
result in a UA's inability to successfully perform Pin Validation for
a Known Pinned Host if the UA's noted Pins and the host's true Pins
diverge.
(UA = User Agent, ovvero il tuo browser)
La RFC raccomanda una scadenza intorno ai 60 giorni (che è esattamente il tempo che Github usa):
There is probably no ideal upper limit to the max-age directive
that would satisfy all use cases. However, a value on the order of
60 days (5,184,000 seconds) may be considered a balance between the
two competing security concerns.