Skip to main content

V13.3.2 SOAP Web Service

Requirement:#

Verify that the message payload is signed using WS-Security to ensure reliable transport between client and service.

Explanation:#

Payload сообщения относится к данным, передаваемым между клиентом (например, web application) и службой (например, web service или API). Подписание payload сообщения с помощью WS-Security означает, что данные снабжены цифровой подписью для обеспечения их целостности и подлинности во время передачи. WS-Security — это спецификация, предоставляющая набор стандартов и механизмов для защиты web service на основе SOAP. В первую очередь он касается безопасности на уровне сообщений, включая шифрование, цифровую подпись и отметку времени. 

Remediation:#

Чтобы решить проблему обеспечения надежной транспортировки полезной нагрузки сообщения, можно предпринять следующие шаги:

  • Реализуйте использование WS-Security для подписи полезной нагрузки сообщения. Это стандарт защиты сообщений в веб-службах, который позволяет гарантировать целостность и подлинность сообщения.
  • Используйте безопасный и доверенный центр сертификации для выдачи цифровых сертификатов, которые будут использоваться для подписи полезной нагрузки сообщения.
  • Используйте безопасный и зашифрованный транспортный механизм, такой как HTTPS, для передачи сообщений.
  • Рассмотрите возможность реализации шлюза API, который может принудительно использовать WS-Security и транспортное шифрование, а также может применять другие меры безопасности, такие как контроль доступа и ограничение скорости.
  • Регулярно проверяйте систему на наличие любых признаков взлома или несанкционированного доступа и незамедлительно реагируйте на любые обнаруженные инциденты безопасности.
  • Рассмотрите возможность проведения регулярного тестирования на проникновение и оценки безопасности, чтобы выявить любые потенциальные уязвимости и обеспечить эффективность мер безопасности.

Вот пример кода на Python, который реализует WS-Security с помощью библиотеки zeep:

from zeep import Client
from zeep.transports import Transport
from zeep.wsse.signature import Signature
transport = Transport(cert=("cert.pem", "key.pem"))
client = Client("wsdl_file.wsdl", transport=transport)
signature = Signature("cert.pem", "key.pem")
client.set_default_wsse(signature)
result = client.service.call_service_method()

В этом примере клиента создается с использованием файла WSDL и пользовательского транспорта, использующего сертификат и закрытый ключ. Класс Signature используется для создания заголовка WSSE, включающего цифровую подпись, и этот заголовок устанавливается в качестве заголовка WSSE по умолчанию для клиента. При вызове метода службы подписанный payload сообщения включается в запрос, обеспечивая целостность и подлинность сообщения во время передачи.

Additional:#

CWE-434: Unrestricted Upload of File with Dangerous Type

Ws-security в SoapUI Pro