Как я могу запустить CVE-2024-30251 (AIOHTTP Multipart/Form-Data DOS) с минимальным сценарием POC? [Нужен простой конкреPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу запустить CVE-2024-30251 (AIOHTTP Multipart/Form-Data DOS) с минимальным сценарием POC? [Нужен простой конкре

Сообщение Anonymous »

Я пытаюсь воспроизвести CVE-20124-30251, уязвимость отказа в услуге в AIOHTTP (Python Async Web Framework), которая влияет на версии до 3.9.4. Согласно рекомендациям, эта уязвимость запускается путем отправки специально продуманного Multipart/Form-Data Post запрос, который приводит к тому, что сервер AIOHTTP входит в бесконечный цикл и стал не отвечать, эффективно приводя к DOS. Сервер AIOHTTP и протестирован с обеими версиями
3.3.8.6 (известно, что затронут) и 3.9.5 (исправлен). < /li>
[*] Я создал различные узолотые многолетние полезные нагрузки, включая отсутствующие границы закрытия и использование больших заголовков с длиной контента. /> наблюдаемое поведение < /h2>

Как в 3.8.6, так и в 3.9.5 сервер не висит. Вместо этого я постоянно получаю ошибку обработки, такую ​​как «Исключение во время обработки загрузки: чтение после EOF» или 400 плохой запрос. Требуется ли точное поведение полезной нагрузки и соединения для надежного запуска бесконечной петли/DOS, описанного в CVE-2024-30251 в AIOHTTP 3.8.6? Воспроизведите это в минимальном формате скрипта эксплуатации, и если да, то не могли бы вы поделиться точными шагами и полезной нагрузкой? /> logging.basicConfig (level = logging.info)
logger = logging.getLogger ("multipart-server")

async def upload_handler (запрос):
logger.info ("Получен запрос на загрузку.")
try:
reader = await request.multip. logger.info ("инициализированный многогататный считыватель.")
part_num = 0
while true:
logger.info ("ждать следующей части ...")
part = await reader.next ()
if part none:
logger.info ("нет больше деталей. 1
logger.info (f "part part {part_num}: headers = {dict (part.headers)}")
chunk_num = 0
while true:
logger.info (f "chunk {chunk_num} from part {part_num} ...") Если не Chunk:
logger.info (f "end of part {part_num}.")
break
logger.info (f "Читать chunk {chunk_num} size {len (Chunk)} bytes from part_num}.")
chunk_num += 1
= 1 < /pre>

client.py
< /ul>

import stoct

host = '127.0.0.1'
port = 8080

boundary = '-----11'
worby = 8080

boundary = '--- /> f '-{Brandary} \ r \ n'
'Содержание-дисспосировка: form-data; filename = "test.txt" \ r \ n '
' content-type: text /plain \ r \ n '
' \ r \ n '
' Это содержимое файла. \ r \ n '
# без закрытия границы! f'host: {host}: {port} \ r \ n '
f'content-type: Multipart /form-data; '\ r \ n'
)

с socket.create_connection ((хост, порт)) как sock:
sock.sendall (headers.encode ('utf-8') + body.encode ('utf-8'))
receced: in recected = sock.recv ('4096)
in recected = pryced "). /> print(response.decode('utf-8', errors='replace'))
except Exception as e:
print(f"Exception while reading response: {e}")


References
GitHub Security Advisory
NVD CVE-2024-30251 < /p>
Сводка < /h2>
Несмотря на то, что они следуют публичным рекомендациям и попыткам уловообразных многочисленных запросов, я вижу одинаковую обработку ошибок как в затронутых, так и в фиксированных версиях Aiohttp. Цикл в затронутой версии (3.8.6) и грациозно обрабатывает в исправленной версии (в соответствии с консультацией) (> = 3.9.4)
Спасибо за любое руководство или рабочие примеры!

Подробнее здесь: https://stackoverflow.com/questions/796 ... h-a-minima
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»