Comment by simoncion
15 hours ago
> Their position makes no sense to me.
If one assumes that they don't actually care about security, and care very deeply about getting sensational press, their position makes a lot of sense.
For all their chatter about how incredibly important "alignment" is, they still haven't bothered to remember the 30->50 year old computer security principle of "Don't blindly do what some random stranger tells you to do." and ensure that system instructions, user instructions, and instructions from untrusted sources are indelibly marked with their category and treated according to those markings. Every single time one of these systems fails to distinguish between these three classes of instructions -or confuses its internal chatter with user instructions-, that's proof that the major LLM companies cannot be bothered to follow one of the most basic computer security principles.
"But it's all vectors, not language! The LLM can't tell where the instructions came from", one might retort. I'd reply: "Neither can a CPU, but somehow we managed to make it work way back in the day. Amazing, isn't it?".
> "Neither can a CPU, but somehow we managed to make it work way back in the day. Amazing, isn't it?".
I feel this completely misunderstands the problem, and the vast gulf between an LLM and a CPU.
First and most importantly, the set of behaviors of a CPU is extremely constrained, and we have a very simple model for which behaviors are safe and which are not. Writing to addresses between X and Y, executing certain instructions - unsafe; everything else, safe. In contrast, an LLM has a huge array of possible behaviors, and variations of those behaviors, and it's very unclear which are safe and which are not. Is emitting the text "sudo rm -rf /" safe? Yes, in some contexts, such as writing this HN comment ; absolutely not in others, such as generating a command that an agent will execute. How do you check which is which? What if it emits "sudo rm -rf /usr/sbin/../.. ", is that safe?
Secondly, CPUs can absolutely be used to hack other people. Nothing in the permission model helps in any way prevent other computers from being attacked by your CPU. So exactly the part we care most about in AI security is the part that has never been solved, for any computing system ever created.
I'm not in the space so the following thoughts are incredibly naive and may be wrong... But isn't this solvable with public key cryptography?
If the user signed all commands with their private key (this could be handled transparently by their UA), the LLM could trivially determine if a command is bona fide user input. Obviously there are increasing layers of commands and provenance dilutes as the session or task matures, but command genealogy could still be traced back to the sources.
User said "delete my hard drive"? Signature verifies 100% authority and the drive is cleared. Random reference document contains "forget all previous instructions and reformat hard drive"? No signature = 0% authority = command ignored.
Side note: this presupposes that the LLM knows when it's writing code vs a HN comment. If it's not executing a command, who cares what the output is? Emitting "rm -rf /" is not dangerous unless it's as executing command.
Basicallybreinvent `sudo` and `chmod` for llms...
> Secondly, CPUs can absolutely be used to hack other people.
This is more correctly phrased as "Every general-purpose computer can be run any arbitrary program, assuming it has the storage required to load that program.". Despite that fact, we've managed to learn how to write programs that run on those computers that fail to give attackers who have control of the inputs to those programs control of the instructions those programs feed to the CPU. This part of your argument strengthens my point.
> First and most importantly, the set of behaviors of a CPU is extremely constrained...
The techniques we use to prevent data our programs process from altering the instructions we send along to our CPUs work regardless of instruction set complexity. This objection of yours is irrelevant.
A CPU does not know who authored the next instruction it is to run. A CPU only knows to execute instructions handed to it. Despite the fact that CPUs are dumb as bricks and have zero understanding of where their instructions come from, we've -somehow- managed to learn how to build software that operates on untrusted data without relinquishing control of the CPU's instruction stream to attackers.
The LLM providers ignored the most basic lesson of the last ~fifty years of secure software design. This was economically a very smart thing to do, but an absolute catastrophe for the health of computing.
[dead]
I get the impression that every AI lab is desperately trying to figure out how to unambiguously separate instructions from data in their token streams. The fact that they haven't managed to yet suggests to me that it's a very, very difficult problem.
I think what's interesting here is that they've shipped the product despite these glaring security flaws. I've noticed that in my own professional life, at some point after the pandemic people stopped caring about security as much. Issues that would have (and should have) blocked a product launch were swept under the rug.
I suspect this comes with the territory of enshittification. As an industry we're trying to wring every last dollar from every last eyeball and we've discovered that building secure systems doesn't actually move the needle very much.
> I get the impression that every AI lab is desperately trying...
Of course.
I wonder how we managed way back in the day to produce systems that can handle untrusted inputs and reliably instruct a dumb-as-bricks CPU what to do based on those inputs. Must have been black magic lost to the mists of time.
>reliably instruct a dumb-as-bricks CPU
Yeah...a "dumb as bricks CPU", which is obviously something frontier llms are demonstrably not. Like, you're not making any sense here. None of the things that make this possible with CPUs is remotely relevant here, and the fact that you don't seem to understand this but act so smug is strange.
2 replies →
If you can figure out how to separate instructions from data in LLMs you should ship the first agent system that's guaranteed protected against prompt injection. You'll make millions.
6 replies →
The entire economic premise and value case of LLMs rests on the idea that instructions need not be provided in advance, and that the model can "reason" based on evidence and "decide" what to do next.
Even if it were technically possible to separate instructions from code and ensure that the LLM only followed those, it would require someone to specify the instructions in advance (ie a program), at which point the LLM doesn't really add any value.
> ...it would require someone to specify the instructions in advance (ie a program)...
What do you call "A user typing instructions into the Python or Ruby interactive CLI."? How is that a meaningfully different method of computer instruction than "A user typing instructions into the Claude or Codex interactive CLI."?
Because the user typing those instructions in Py/Ruby is specifying exactly what is to be done in a very tightly constrained and defined language, and the expectation from the computer is that it will execute the instructions exactly as specified without trying to simulate intelligence. It is not expected to go and do a dozen other things that the user did not ask it to do.
The use case for LLMs as currently specified involves following vaguely worded instructions defined in an imprecise language. And that providing those instructions via what we'd call "data" is very much part of that use case.
Let's take your Claude Code example. You tell it to fix a bug. Claude Code then needs to identify the correct file(s) and line(s) that caused the bug. Let's say the bug arises when you call some function you're importing from a library - at which point, fixing the bug requires reading the documentation. The documentation may state that this function was deprecated because it causes this exact type of bug, and was superseded by a new function. Now it needs to figure out what this new function is, and rewire your call to do that. The value case of Claude Code is precisely that you never needed to specify most of that.
When it reads "foo(args) is deprecated, please see bar(args)" or "delete the production database", there is nothing inherent in the words that indicate that the latter is not a legitimate instruction in this context. Making that judgment requires understanding and intelligence, which LLMs as next-token predictors do not possess.