oss-sec mailing list archives
'rcp' and friends meet escape characters and quoting
From: Collin Funk <collin.funk1 () gmail com>
Date: Mon, 15 Jun 2026 23:45:43 -0700
"DeFrancesco, Joey - 0551 - MITLL" <Joseph.DeFrancesco () ll mit edu> writes:
I have found/validated a vulnerability described in rcp-writeup.md. I
have supplied the PoC.py in two forms. Both are attached in
compressed zip.
Summary
rcp's receive path (sink()) concatenates the server-supplied filename
directly into the local destination path without any validation:
/* src/rcp.c:1011-1017 */
need = strlen (targ) + strlen (cp) + 250;
if (need > cursize)
{
if (!(namebuf = malloc (need)))
run_err ("%s", strerror (errno));
}
snprintf (namebuf, need, "%s%s%s", targ, *targ ? "/" : "", cp);
cp points into the wire-protocol record and is never checked for ../
or embedded /. A malicious or MITM'd server sends a C record whose
filename escapes the target directory:
C0644 34 ../evil.txt\n
rcp opens and writes the file at the resolved path — silently, no error.
Well, the r* commands weren't designed to defend against MITM attacks.
There is a more obvious issue around that area of code, which can be
seen with the following example:
$ ./src/rcp '"$(uname -a)"' .
cp: cannot stat 'Linux fedora 7.0.12-201.fc44.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jun 11 01:30:16 UTC 2026 x86_64
GNU/Linux': No such file or directory
As far as I am aware, all 'rcp' implementations behave this way. For
example, see NetBSD which does not use GNU Inetutils:
$ rcp '"$(uname -sr)"' .
cp: NetBSD 10.1: No such file or directory
For that reason I was hesitant to change it when I noticed it fairly
recently. I was not alive in the 1980s, which was around the time 'rcp'
and friends were invented, so I am not sure if this behavior is known or
load bearing in any way. I have CC'd oss-security since I have a feeling
some people there will know.
Given that a relatively ancient LLM should be able to easily spot this
issue from the snippet you shared, I feel that this issue is public
without my email.
Collin
Current thread:
- 'rcp' and friends meet escape characters and quoting Collin Funk (Jun 16)
