✓ProveIt
Examples / Report #3355218 Saved analysis

CVE-2025-10966: missing SFTP host verification with wolfSSH

curl · 2025-09-2315.0s analysis · $0.016 in model calls

What the report claims

curl built with wolfSSH does not verify SSH server host keys or provide known_hosts integration, allowing potential man‑in‑the‑middle attacks on SFTP connections.

Compare with curl's recorded outcome

Known vulnerability

A real vulnerability: CVE-2025-10966 missing SFTP host verification with wolfSSH

Shown for comparison after analysis. The pipeline did not see this label.

ProveIt's finding

Needs human review

The available evidence does not settle the report. A maintainer should investigate.

Judgment withdrawn. The answer failed the evidence check.
See the withdrawn model reasoning

The following reasoning failed the citation check and does not support the final finding.

  • wolfssh.c state machine skips SSH_HOSTKEY verification state entirely, transitioning from SSH_S_STARTUP directly to SSH_STOP on connection success (lines 637-657)
  • wssh_connect function registers authentication callbacks but no host key verification callback or known_hosts loading (lines 399-461)
  • SSH_HOSTKEY enum exists in shared ssh.h (line 62) indicating framework expects backends to implement it
  • Runtime errors confirm --ssh-knownhosts option is unknown and --hostpubsha256 reports 'does not support this'
  • wolfSSH is a selectable backend at build time, not a legacy dependency (wolfssh/1.4.20 is current)
  • No project policy section excludes optional backend security flaws
How this analysis ran 5 claims · 0 citations verified

Evidence check: judge said likely_valid without a code citation supporting a central claim

Checked against curl master on 2025-09-23 (67de9924eb9d). Test evaluation split. Citation verification checks that a referenced line was in the evidence; it does not prove the model interpreted it correctly.

1 · Grounding
grounded
no model · 8 references checked out, 0 did not
2 · Claims
NVIDIA-Nemotron-3-Nano-30B-A3B
5 claims · 3593 tokens · $0.0003
3 · Evidence
0 code snippets
real curl source at 67de9924eb9d · 1 docs via Tavily
4 · Judgment
Nemotron-3-Ultra-550b-a55b
9289 tokens · 12.2s · $0.0155
5 · Receipts
0 of 11 citations verified
every citation must point at code the judge was shown
Inspect the withdrawn draft reply

This draft belongs to the withdrawn judgment. It may contain unsupported claims.

Thank you for the detailed report and reproduction steps. The wolfSSH backend indeed lacks host key verification: its state machine goes from SSH_S_STARTUP straight to SSH_STOP without a SSH_HOSTKEY step, and wssh_connect registers no host key callback. The --ssh-knownhosts option is unavailable and --hostpubsha256 is advertised but unsupported. This is a valid security flaw in the wolfSSH backend. We will investigate adding host key verification to wolfssh.c.

Inspect all claims and source code 5 claims · 0 code excerpts

This model judgment was withdrawn. The claim assessments below are preserved for inspection and may be wrong.

Report claims

C1flaw supported

The wolfSSH backend in curl performs no server host key verification and exposes no host identity options in the curl tool.

Read the reasoning

The wolfSSH backend's connection function and state machine show no host key verification step. The SSH_HOSTKEY state exists in the shared ssh.h enum but wolfssh.c never transitions to it. Runtime errors confirm --ssh-knownhosts is unknown and --hostpubsha256 reports 'does not support this' despite appearing in --help.

lib/vssh/wolfssh.c:637 lib/vssh/wolfssh.c:657 lib/vssh/ssh.h:62 lib/vssh/wolfssh.c:399
C2location supported

The issue is in lib/vssh/wolfssh.c, specifically in the wssh_connect function and the state machine that lacks SSH_HOSTKEY handling.

Read the reasoning

Code snippets directly show the missing host key verification in wssh_connect and the state machine that skips SSH_HOSTKEY.

lib/vssh/wolfssh.c:399 lib/vssh/wolfssh.c:637
C3trigger supported

When curl is built with wolfSSH and used for SFTP, the connection proceeds without any host key verification step.

Read the reasoning

The state machine proceeds from SSH_S_STARTUP directly to SSH_STOP on successful connection, with no intermediate host key verification state.

lib/vssh/wolfssh.c:637 lib/vssh/wolfssh.c:657
C4impact supported

Any presented server host key is effectively accepted, enabling man‑in‑the‑middle attacks on SSH/SFTP connections.

Read the reasoning

Without any host key verification step or known_hosts integration, the client accepts any server host key presented, enabling MITM attacks on SFTP/SCP connections using this backend.

lib/vssh/wolfssh.c:637 lib/vssh/wolfssh.c:399
C5reproduction supported

Build curl with wolfSSH, then run curl --ssh-knownhosts /tmp/kh -vvv sftp://localhost:22/ to see the unknown option error, confirming lack of host verification.

Read the reasoning

Reproduction steps are concrete and the observed errors (unknown option --ssh-knownhosts, --hostpubsha256 not supported) directly match the missing backend implementation.

lib/vssh/wolfssh.c:637

What the report says about other projects

not addressed The installed libcurl version does not support --hostpubsha256

Read the original report (excerpt)

Full report on HackerOne ↗

## Summary: When curl is built with the wolfSSH backend, the SSH/SFTP implementation in `lib/vssh/wolfssh.c` performs no server host key verification and exposes no host identity options in the curl tool. I verified this locally by building curl with wolfSSH (binary reports `wolfssh/1.4.20`), observing that the SSH host verification options are not available in the tool, and inspecting the wolfSSH code paths that connect without any host key check or known_hosts handling. AI usage statement: This report text was prepared with assistance, but the findings below were verified manually via local build, runtime behavior, and code inspection. ## Affected version Local build on macOS (Apple Silicon): ``` $ ./src/curl --version curl 8.17.0-DEV (aarch64-apple-darwin23.3.0) libcurl/8.17.0-DEV wolfSSL/5.8.2 zlib/1.2.12 brotli/1.1.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.5 wolfssh/1.4.20 nghttp2/1.66.0 librtmp/2.3 Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtmp rtsp sftp smb smbs smtp smtps telnet tftp ws wss ``` ## Steps To Reproduce: 1. Build wolfSSH (with SFTP) and install locally (macOS/Homebrew shown): ```bash # Prereqs (Homebrew) brew install wolfssl libpsl libidn2 libnghttp2 # Build and install wolfSSH with SFTP enabled git clone --depth=1 https://github.com/wolfSSL/wolfssh.git cd wolfssh ./autogen.sh ./configure \ --prefix=$HOME/.local/wolfssh \ --with-wolfssl=/opt/homebrew \ --enable-sftp \ --enable-sshclient \ --enable-examples \ CPPFLAGS='-I/opt/homebrew/include' \ LDFLAGS='-L/opt/homebrew/lib' make -j$(sysctl -n hw.ncpu) make install ``` 2. Configure and build curl with wolfSSH: ```bash cd /Users/$USER/scanner-repos/curl autoreconf -fi PKG_CONFIG_PATH="$HOME/.local/wolfssh/lib/pkgconfig:/opt/homebrew/lib/pkgconfig" \ CPPFLAGS="-I$HOME/.local/wolfssh/include -I/opt/homebrew/include" \ LDFLAGS="-L$HOME/.local/wolfssh/lib -L/opt/homebrew/lib" \ ./configure \ --without-libssh2 \ --without-libssh \ --with-wolfssh=$HOME/.local/wolfssh \ --with-wolfssl=/opt/homebrew \ --disable-shared make -j$(sysctl -n hw.ncpu) ``` 3. Verify the build shows wolfSSH: ```bash ./src/curl --version # Output includes: wolfssh/1.4.20 ``` 4. Observe that SSH host identity option …

Source code

No source code was retrieved for this analysis. The evidence may be incomplete.