CA2300: Ne használjon nem biztonságos deszerializáló binárisformattert

Tulajdonság Érték
Szabályazonosító CA2300
Cím Ne használja a nem biztonságos BinaryFormatter deszerializálót.
Kategória Biztonság
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

A System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deszerializálási módszer meghívása vagy hivatkozása megtörtént.

Szabály leírása

A nem biztonságos deszerializálók sebezhetők a nem megbízható adatok deszerializálásakor. A támadó úgy módosíthatja a szerializált adatokat, hogy váratlan típusokat is tartalmazzon, hogy kártékony mellékhatásokkal rendelkező objektumokat injektáljon. A nem biztonságos deszerializáló elleni támadás például parancsokat hajthat végre az alapul szolgáló operációs rendszeren, kommunikálhat a hálózaton keresztül, vagy fájlokat törölhet.

Ez a szabály megkeresi System.Runtime.Serialization.Formatters.Binary.BinaryFormatter a deszerializálási metódus hívásait vagy hivatkozásait. Ha csak akkor szeretné deszerializálni, ha a Binder tulajdonság a típusok korlátozására van beállítva, tiltsa le ezt a szabályt, és engedélyezze helyette a CA2301 és a CA2302 szabályokat. A deszerializálható típusok korlátozása segíthet enyhíteni az ismert távoli kódvégrehajtási támadásokat, de a deszerializálás továbbra is ki lesz téve a szolgáltatásmegtagadási támadásoknak.

BinaryFormatter nem biztonságos, és nem lehet biztonságossá tenni. További információt a BinaryFormatter biztonsági útmutatójában talál.

Szabálysértések kijavítása

  • Ehelyett használjon biztonságos szerializálót, és ne engedélyezze a támadónak, hogy tetszőleges típust adjon meg a deszerializáláshoz. További információkért lásd az előnyben részesített alternatívákat.
  • Tegye a szerializált adatokat manipulációbiztossá. A szerializálás után kriptográfiailag írja alá a szerializált adatokat. A deszerializálás előtt ellenőrizze a titkosítási aláírást. Védje meg a titkosítási kulcsot a nyilvánosságra hozataltól, és tervezzen kulcsforgatást.
  • Ez a beállítás sebezhetővé teszi a kódot a szolgáltatásmegtagadási támadásokkal és az esetleges távoli kódvégrehajtási támadásokkal szemben a jövőben. További információt a BinaryFormatter biztonsági útmutatójában talál. Deszerializált típusok korlátozása. Egyéni System.Runtime.Serialization.SerializationBinder implementálás. A deszerializálás előtt minden kódútvonalon állítsa be a Binder tulajdonságot az Ön egyéni SerializationBinder példányára. Ha a típus váratlan, a felülírt BindToType metódusban kivételt kell tenni a deszerializálás leállításához.

Mikor kell letiltani a figyelmeztetéseket?

BinaryFormatter nem biztonságos, és nem lehet biztonságossá tenni.

Példák pszeudokódokra

Megsértés

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class ExampleClass
{
    public object MyDeserialize(byte[] bytes)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        return formatter.Deserialize(new MemoryStream(bytes));
    }
}
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

Public Class ExampleClass
    Public Function MyDeserialize(bytes As Byte()) As Object
        Dim formatter As BinaryFormatter = New BinaryFormatter()
        Return formatter.Deserialize(New MemoryStream(bytes))
    End Function
End Class

CA2301: Ne hívja meg a BinaryFormatter.Deserialize parancsot a BinaryFormatter.Binder első beállítása nélkül

CA2302: Győződjön meg arról, hogy a BinaryFormatter.Binder be van állítva a BinaryFormatter.Deserialize hívása előtt