Active Template Library (ATL) Security Update – modifiche da apportare al proprio codice
Microsoft ha rilasciato un out-of-band security update per chi ha utilizzato le classi Active Template Library (ATL) in componenti e controlli. In caso in cui aveste utilizzato in un progetto C++ queste librerie dovete identificare le potenziali vulnerabilità, modificare e rimcompilare i controlli e componenti usando la versione aggiornata di ATL.
Micorosoft ha rilasciato un update alle librerie e hader files per le classi ATL presenti nelle versioni supportate di Visual Studio.
Se ho usato ATL come faccio a verificare il mio codice ?
Nella figura seguente trovate un flow-chart che vi può aiutare a capire quali interfacce/macro/tipi dovete ricercare nel codice per capire se il codice scritto è potenzialmente vulnerabile.
Quindi:
1: Se avete un oggetto COM guardate se è fleggato come safe for initializing (SFI)
2: Se eredita da IPersistStreamInitImpl, usa AtlIPersistStreamInit_Load cercate se vengono usate le macro illustrate nel diagramma.
3: Se avete usato CComVariant::ReadFromStream controllate se vengono passati dati non-trusted.
Questa vulnerabilità si applica ad oggetti COM (Active X e non) che usano ATL ed in particolare specifiche interfcce, metodi, macro e/o tipi.
Come posso correggere la vulnerabilità ? Per quali versioni di Visual Studio ( e di ATL) è stata rilasciata una fix ?
Sono state rilasciate le fix per le librerie e gli header file per le versione supportate di Visual Studio. Se state usando una versione non supportata di Visual Studio (e.g Visual C++ 6.0) potete rimuovere il flag “Safe for initializing” e rimuovere le interfacce IPersistStreamInit & IPersistStorage, in aternativa passare ad una versione supportata.
Le versioni di ATL di cui sono disponibili le fix sono la 7.0, 7.1, 8.0, 9.0.
Trovate la lista delle versioni supportate di Visual Studio a questo link.
Da dove scarico le fix?
Microsoft Visual Studio .NET 2003 Service Pack 1(KB971089)
Microsoft Visual Studio 2005 Service Pack 1(KB971090)
Microsoft Visual Studio 2005 Service Pack 1 64-bit Hosted Visual C++ Tools(KB973830)
Microsoft Visual Studio 2008(KB971091)
Microsoft Visual Studio 2008 Service Pack 1(KB971092)
Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package(KB973544)
Microsoft Visual C++ 2008 Redistributable Package(KB973551)
Microsoft Visual C++ 2008 Service Pack 1 Redistributable Package (KB973552)
Basta ricompilare il codice con le nuove librerie ?
Ricompilando il codice che usa quanto visto prima, si ottengono dei warning (se non disabilitati) di compilazione che indicano come deprecate le macro/metodi afflitti da questa vulnerabilità.
Bisogna quindi modificare il codice ed usare le nuove macro oppure usare la nuova versione della ReadFromStream.
Se con il vostro codice compilato aveto rilasciato anche le dll di ATL(ATL.DLL, ATLxx.DLL) in specifiche locazioni, dovete ridristribuire anche le nuove versioni di queste dll con il nuovo codice compilato.
Trovate tutti i dettagli nel documento Active Template Library Security Update for Developers.
Risorse:
- Active Template Library Security Update for Developers
- Download degli header file e librerie aggiornate ( Microsoft Security Bulletin MS09-035)
- Rilascio straordinario di sicurezza Microsoft del 28 luglio 2009: prime indicazioni e raccomandazioni (Blog Feliciano Intini)
- Video su Channel 9
- Detailed technical information on this security release for ATL developers: https://blogs.technet.com/srd/archive/2009/07/28/overview-of-the-out-of-band-release.aspx
- Additional information on this security release is available on the Security Research & Defense blog
- Overview with background + table of links: https://blogs.technet.com/srd/archive/2009/07/28/overview-of-the-out-of-band-release.aspx
- IE mitigation explanation: https://blogs.technet.com/srd/archive/2009/07/28/internet-explorer-mitigations-for-atl-data-stream-vulnerabilities.aspx
- Deep dive for developers: https://blogs.technet.com/srd/archive/2009/07/28/atl-vulnerability-developer-deep-dive.aspx
- How msvidctl.dll is related: https://blogs.technet.com/srd/archive/2009/07/28/msvidctl-ms09-032-and-the-atl-vulnerability.aspx