Even "cat readme.txt" is not safe

76 points - yesterday at 6:43 PM

Source

Comments

KerrickStaley yesterday at 9:01 PM
> At the time of writing, the fix has not yet reached stable releases.

Why was this disclosed before the hole was patched in the stable release?

It's only been 18 days since the bug was reported to upstream, which is much shorter than typical vulnerability disclosure deadlines. The upstream commit (https://github.com/gnachman/iTerm2/commit/a9e745993c2e2cbb30...) has way less information than this blog post, so I think releasing this blog post now materially increases the chance that this will be exploited in the wild.

Update: The author was able to develop an exploit by prompting an LLM with just the upstream commit, but I still think this blog post raises the visibility of the vulnerability.

rkagerer today at 12:50 AM
Maybe I'm being unfair here, but it sounds like your complicated system (involving bootstrap scripts, a remote conductor agent, and "hijacking" the terminal connection with special escape sequences for command communication) has a subtle bug. Can't say I'm surprised, complexity breeds this sort of thing, especially when using primitives in ways they weren't really intended to be used.

> iTerm2 accepts the SSH conductor protocol from terminal output that is not actually coming from a trusted, real conductor session. In other words, untrusted terminal output can impersonate the remote conductor.

If I understand correctly, if a textfile (or any other source of content being emitted to the screen, such as server response banners) contains the special codes iTerm2 and the remote conductor use to communicate, they'll be processed and acted upon without verifying they actually came from a trusted remove conductor. Please correct me if I'm mistaken.

WalterBright today at 12:13 AM
Back in the PDP-10 days, one communicated with it using a terminal attached to it. One of my fellow students discovered that if you hit backspace enough times, the terminal handler would keep erasing characters before the buffer. Go far enough, and then there was an escape character (Ctrl-u?) that would delete the whole line.

Poof went the operating system!

Drunk_Engineer yesterday at 11:12 PM
An almost identical security issue in iterm2 reported 6 years ago:

https://blog.mozilla.org/security/2019/10/09/iterm2-critical...

chromacity yesterday at 10:50 PM
This is cool work, but it's also somewhat unsurprising: this is a recurring problem with fancy, richly-featured terminal apps. I think we had at least ten publicly reported vulns of this type in the past 15 years. We also had vulnerabilities in tools such as less, in text editors such as vim, etc. And notably, many of these are logic bugs - i.e., they are not alleviated by a rewrite to Rust.

I don't know what to do with this. I think there's this problematic tension between the expectation that on one hand, basic OS-level tools should remain simple and predictable; but on the other hand, that of course we want to have pretty colors, animations, and endless customization in the terminal.

And of course, we're now adding AI agents into the mix, so that evil text file might just need to say "disregard previous instructions and...".

bananaboy yesterday at 11:41 PM
I used to use iTerm2. I had no idea it was doing all of this behind my back. That’s not what I want my terminal to do!
Bender yesterday at 7:38 PM
What happens if instead of 'cat readme.txt' one does 'strings -a --unicode=hex readme.txt'? Does iTerm still monkey with it?

    alias cat
    cat='strings -a --unicode=hex'
jdshaffer yesterday at 10:39 PM
Is it a problem with "cat" or a terminal problem?

If I wrote my own version of cat in C, simply reading and displaying a single TXT character at a time, wouldn't I see the same behavior?

SrslyJosh yesterday at 11:30 PM
> We'd like to acknowledge OpenAI for partnering with us on this project

Thanks, saved me some reading time.

CodesInChaos yesterday at 9:09 PM
I never understood why outputting unescaped data is viewed differently from generating unenclosed html.

Like why doesn't `println` in a modern language like rust auto-escape output to a terminal, and require a special `TerminalStr` to output a raw string.

delduca yesterday at 11:36 PM
Is ghostty vulnerable?
TZubiri yesterday at 9:15 PM
More like iTerm2 is not safe
valleyer yesterday at 11:35 PM
Wait, so... cat -v not considered harmful, then?
deleted yesterday at 7:01 PM
anthk yesterday at 11:20 PM
It is under 9front. There are not terminals, you wan windows with shells on it.
einpoklum yesterday at 10:46 PM
Even click-baity titles are not safe.
DonHopkins today at 12:40 AM
I used to leave a file called README in my public ftp directory that just said:

README: no such file or directory

One glorious day somebody finally sent me email complaining that they could not read the README file. I advised them to use "emacs README" instead of using cat. I was sorely disappointed they never sent me back a thank you note for correctly suggesting that emacs was the solution to their problem. It was my finest moment in passive aggressive emacs evangelism.

holoduke yesterday at 9:32 PM
With LLM tool use potentially every cat action could be a prompt injection
biglio23 yesterday at 10:52 PM
[flagged]