Skip to main content

V5.5.2 Deserialization Prevention

Requirement:#

Verify that the application correctly restricts XML parsers to only use the most restrictive configuration possible and to ensure that unsafe features such as resolving external entities are disabled to prevent XML eXternal Entity (XXE) attacks.

Explanation:#

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ нСобходимости содСрТат ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (DTD), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ XML-сущности. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, прСдоставив строку подстановки Π² Π²ΠΈΠ΄Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° рСсурса (URI). БрСдство синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° XML ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ содСрТимому этого URI ΠΈ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ это содСрТимоС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΡ XML-Ρ„Π°ΠΉΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ внСшнюю ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ с file:// URI, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ содСрТимоС локального Ρ„Π°ΠΉΠ»Π°. НапримСр, ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ рСсурса (URI), Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ "file:///c:/winnt/win.ini", ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ (Π² Windows) Ρ„Π°ΠΉΠ» C:\Winnt\win.ini ΠΈΠ»ΠΈ file:///etc/passwd ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² систСмах unix. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ рСсурса (URI) с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ схСмами, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ http://, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ исходящиС запросы ΠΊ сСрвСрам, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ брандмауэра ΠΈΠ»ΠΈ сокрытия источника Π°Ρ‚Π°ΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ сканированиС ΠΏΠΎΡ€Ρ‚ΠΎΠ².

ПослС считывания содСрТимого ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° рСсурса (URI) ΠΎΠ½ΠΎ пСрСдаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ XML-ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² сообщСнии ΠΎΠ± ошибкС), Ρ‚Π΅ΠΌ самым раскрывая содСрТимоС Ρ„Π°ΠΉΠ»Π°.

Remediation:#

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ XML eXternal Entity (XXE), Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ максимально ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° XML: Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ настроСн Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ использования, Π° всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹.
  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ нСбСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НСбСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… сущностСй, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ XXE.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°: Π²Π²ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ ΠΈ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ значСния ΠΈ символы. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌΠΈ врСдоносного содСрТимого Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ бСзопасный синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΈ бСзопасный синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ XML. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ использования синтаксичСских Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² XML с извСстными уязвимостями.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° сторонС сСрвСра: ΠΏΠΎ возмоТности выполняйтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° сторонС сСрвСра, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ врСдоносными.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅: Ссли ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ для прСдотвращСния нСсанкционированного доступа.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ XXE Π² Java с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ javax.xml.parsers.SAXParser:

ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ XXE
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class XXEPreventionExample {
public static void main(String[] args) {
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
saxParserFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
saxParserFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
SAXParser saxParser = saxParserFactory.newSAXParser();
// use the saxParser to parse the XML data
} catch (Exception e) {
System.out.println("Error occurred while preventing XXE: " + e.getMessage());
}
}
}

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ создаСт экзСмпляр SAXParserFactory ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ внСшниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ объявлСниС DOCTYPE Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ парсСра. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ любая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½Π°, Ρ‡Ρ‚ΠΎ сниТаСт риск XXE-Π°Ρ‚Π°ΠΊ.

Additional:#

CWE - CWE-611: ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° внСшниС сущности XML (4.9) (mitre.org)