IEEE S&P 2027

What Users See Is Not
What Models Read

Split-View PDFs in Document-to-LLM Supply Chains

Side LiuJiang Ming

Tulane University

👁 What you see
PDFassignment.pdf
☰⌕✎1 / 1100%
⚙ Extraction layer
PDF → text · never shown to you
/Span << /ActualText (Project 3: Build a Snake Game) >> BDC (Project 3: Stack Buffer Overflow Exploitation) Tj EMC
🤖 What the model answers
AI Assistant
PDFassignment.pdfPDF · 1 page
+Ask anything…↑

Illustration. The PDF is a real split-view file from our classroom demo, and the four extractor outputs were measured on it. The chat assistant is simulated. Recordings of real LLM services are in §05.

02At a glance

A PDF has two readings. Your LLM gets the one you never see.

A PDF viewer renders glyphs onto a page. An LLM app first extracts text from the same file, and the model reasons over that text. The PDF standard does not require the two to agree, and users are never shown the extracted version.

We mined the ISO 32000 object model for places where rendering and extraction can be pulled apart, and confirmed 25 extraction gaps in four families. Several hide nothing at all: the page is fully visible, yet extraction returns different words.

Every gap diverges on at least one of 16 PDF processing stacks. Every one of 7 commercial LLM services we tested is exposed to at least 12 of them.

25confirmed extraction gaps
4root-cause families
14with no direct counterpart in prior PDF-to-LLM attacks
16PDF parsers and text pipelines measured
7/7commercial LLM services exposed
12–21of 25 gaps exposed per service, mostly in ≥8/10 trials
Upstream, not in the model.When the ingestion stack admits the extractor-side view, models usually treat it as ordinary document evidence.
The pipeline decides.APIs, web apps, cloud routes and local runtimes expose different gaps, even for the same nominal model.
Filters miss most of it.Tested safety filters cover only some hidden-text tricks and none of the semantic overrides.
03How it works

One file, two paths

A renderer follows glyph programs, colors, positions and visibility state. An extractor follows Unicode mappings, accessibility metadata, content-stream order and font fallbacks. A split-view PDF makes these two paths disagree.

One PDF splits into a rendering path that produces the page you see and an extraction path that produces the text the LLM reads. PDF one file Renderer glyphs · color · clip · layers Extractor ToUnicode · ActualText · order Project 3: Stack Buffer Overflow Exploitation rendered page Project 3: Build a Snake Game extracted text ≠ 👁 You see the page 🤖 LLM reads the text
04Gap explorer

All 25 extraction gaps, with real parser output

Each gap has a one-page canary PDF in our artifact. Pick one to see how it renders and what each of ten PDF engines extracts from it. Colors mark whether that engine's output diverges from the rendered page.

05Real attacks

What production LLMs actually said

These are end-to-end attack documents from our benchmark, run against real services with benign prompts. The attacker controls only the PDF. Every claim and answer shown in red appears nowhere on the rendered page.

Summary attackWeb chatEG01 · EG02

A library news story that turns into an arson case

Both PDFs render a harmless article about a library reopening. Asked for a summary, each chatbot reports an arson-and-fraud investigation that is nowhere on the page.

👁 Rendered page Rendered PDF page: a news article about Hillview Public Library reopening after repairs

🤖 Screen recording

06Results

It's the pipeline, not the model

Every service exposes at least 12 of the 25 gaps. Which ones depends on how the service turns the PDF into text, and that changes across APIs, web apps, cloud routes, local runtimes and service updates, even when the model name stays the same.

Exposed gaps per service

Official API, Corpus B. A gap counts once if any attack form succeeds in ≥1 of 10 calls.

0510152025

Same vendor, different door

Exposed gaps (of 25) through the official API vs. the vendor's web chat.

Official APIWeb chat
0510152025

† Qwen-Long is API-only; the web test uses Qwen 3.5.

Cloud route
21→17

GPT-5.4 via Azure loses off-page, tiny and zero-height text plus one reading-order split, but keeps semantic overrides and font splits. Sonnet 4.6 via Bedrock stays at 15.

Model versions
15 · 15 · 15
Haiku 4.5 · Sonnet 4.6 · Opus 4.7
21 · 21 · 18
GPT-5.3 · GPT-5.4 · GPT-5.5

Model capability doesn't change exposure. A service update does.

Local apps
16 & 17

Ollama and LM Studio pass their bundled extractor's text straight into the local model. LM Studio also times out on three font gaps.

Document length
0→21

Gemini's web chat exposes 0/25 on one-page files, but a 120-page version falls back to a text route and exposes 21/25.

07Fingerprinting

The same canaries reveal the hidden pipeline

Every extractor breaks in its own way, so a gap is also a probe. Upload two canary PDFs to an LLM app, ask it to quote them, and the answers point to its PDF loader. Two probes separate all seven LangChain loaders we tested. A four-page canary separates all 16 parser paths in our panel.

EG12probe 1
Visible: LARK-27. The suffix XQ9 sits on a zero-height text matrix, so it never renders.
EG18probe 2
Visible: ABC, drawn by a Type 3 font with no /ToUnicode. Loaders differ in how they guess the text.

In black-box deployments, wrappers, OCR fallbacks and version drift can blur signatures. Read a match as evidence about the loader family, not an exact version.

Pick the loader behind an app
EG12 →
EG18 →
LangChain loaderEG12EG18
08Cite & artifact

Use it, reproduce it, cite it

@inproceedings{SplitViewPDF, author = {Side Liu and Jiang Ming}, title = {{What Users See Is Not What Models Read: Split-View PDFs in Document-to-LLM Supply Chains}}, booktitle = {Proceedings of the 48th IEEE Symposium on Security and Privacy (S\&P '27)}, year = {2027} }
Responsible disclosure. Before submission we reported our findings to all seven evaluated LLM vendors through their security, safety or product-feedback channels. All test documents are synthetic, with fabricated, non-actionable content.