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.

image

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: