Является ли образец кода Python2.7 SimpleXMLRPCServer уязвимым? - PullRequest
0 голосов
/ 20 мая 2019

В документации Python 2.7 для SimpleXMLRPCServer следующий код устанавливает сервер:

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)

# Register a function under a different name
def adder_function(x,y):
    return x + y
server.register_function(adder_function, 'add')

# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
    def div(self, x, y):
        return x // y

server.register_instance(MyFuncs())

# Run the server's main loop
server.serve_forever()

Я читал, что XMLRPC-сервер Python может быть уязвимым для некоторых атак XML , в частности, "миллиард смеха", "квадратичный взрыв" и "декомпрессионная бомба". Является ли образец кода из документации уязвимым для этих атак и необходимы ли дополнительные средства для его защиты от этих уязвимостей? Я моделирую некоторый клиент-серверный код после этого примера кода и задаюсь вопросом, насколько уязвим SimpleXMLRPCServer. Если этот пример кода уязвим, я думаю, мне нужно будет что-то сделать и в моем приложении.

EDIT:

Это то, что я реализовал, чтобы устранить уязвимость XML. Правильно ли это, и все ли это необходимо для защиты кода примера?

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

from defusedxml.xmlrpc import monkey_patch  # Protects against XML vulnerabilities.  See https://docs.python.org/2/library/xml.html
monkey_patch()

# Rest of code is the same as above

1 Ответ

1 голос
/ 20 мая 2019

Библиотеки уязвимы для атак XML, и (характер атак является тем, чем они являются) пример кода не защищен от атак, потому что это не то, в чем заключаются уязвимости: они на самом деле лежат в правильных библиотекахреализация спецификаций XML.Для клиентского кода нелегко защитить себя от правильного выполнения вызова API.

Если вас беспокоят эти проблемы, вы можете попробовать использовать библиотеку defusedxml.Согласно документации для xmlrpc.server (которая является версией Python 3 SimpleXMLRPCServer), библиотека defusedxml и ее друг defusedxpat являются кандидатами для включения в стандартную библиотеку Python 3 вбудущее, и не существует сейчас только потому, что они нарушат обратную совместимость.

...