Určitě nesou nějaký díl viny. Takový webhosting totiž například otevírá potenciál pro DoS: Útočník nahraje pro svůj hosting badguy.example
self-signed certifikát vystavený na jméno legit.example
. Webserver má pak dva certifikáty na stejné jméno a při příchozím požadavku rozhodne nejspíš podle pořadí v konfiguraci. Pokud dá přednost certifikátu útočníka, dokázal útočník takovým certifikátem rozbít TLS pro oběť.
To sice je problém hostingu, ale certifikační autorita už ze zásady nesmí takovému incidentu dopustit. Důvěra je dána tím, že k něčemu takovému nesmí dojít. Certifikát se vystavuje na majitele a ne na "spolubydlu", který sdílí stejnou IP. Tedy CA musí myslet i na to, že někdo používá sdílený hosting.
Podle mne je to primárně problém certifikační autority, protože spoléhá na něco, co splněné být nemusí a ta certifikační autorita to nijak neovlivní. Na ten webhosting může být nasměrovaná doména, ale webová prezentace tam být nemusí, může tam být webová prezentace jenom na HTTP – v takových případech tedy nahrání toho podvodného certifikátu žádný problém nezpůsobí. Ten Ondřejův příklad sice může způsobit problém (teoreticky by nemusel, ale to by byla nepravděpodobná konstrukce), ale to je pořád problém mezi webhosterem a jeho zákazníky – problém s neoprávněným vystavením certifikátu z toho dělá až certifikační autorita.
Oprava: Jak jsem byl upozorněn e-mailem od Jozefa Suchdolského (díky!), web server při rozhodování, který certifikát klientovi poslat, nerozhoduje podle doménových jmen v certifikátech, ale podle konfigurovaného doménového jména daného virtuálního webserveru.
Uvedený DoS potenciál tedy neplatí a zároveň původní zranitelnost vyžaduje, aby útočník přejmenoval název svého virtuálního webserveru z badbuy.example
na ověřovací jméno, například 773c7d.13445a.acme.invalid
.
To určitě neplatí obecně pro jakýkoli web server, ale jen pro některé konkrétní implementace – předpokládám, že v tomto případě byl myšlen Apache nebo nginx. Ona by obecně měla k sobě sedět čtveřice virtual host, název v certifikátu, SNI a hlavička Host. Ale tím, jak jsou to technologie z různé doby a na různých úrovních protokolů, ne vždycky se podaří, aby se ta shoda správně kontrolovala.
Kontroloval jsem dokumentaci pro Apache, kde je to uvedeno (třetí odstavec od konce). A vlastně to dává smysl, protože je to z hlediska toku programu přímočaré a jednodušší, proto se dá předpokládat, že takové chování bude implementovat většina webserverů. Ale výjimky se samozřejmě mohou objevit vždy.