Catching prompt injections hidden in PDFs
Comments on “Catching prompt injections hidden in PDFs”
Claim-checked. Scored by all three judges, and its checkable claims were compared with the sources it cites. How far stories are checked
Tom Clancy, a QA engineer, describes how he tested an internal tool that parses financial PDFs for prompt injection. Hidden white-on-white earnings figures, zero-height text and off-page text all got through on his first attempts. He built six single-purpose "judges" (HiddenInk, text-versus-pixel divergence, Unicode, accessibility tags, glyph overlap, non-text ink), each with stated blind spots, such as inline /ActualText substitution. Two further attack vectors remain open as Jira tickets, and he has caught no real-world attempts. The claims are his own, unverified.
Why it ranked
No. 23 of 51 with a score of 0.64. The panel rated it highest on new information (0.86) and technical depth (0.83), lowest on significance (0.51). Placed No. 23, No. 14 by score alone: the seventh Security story of the day (−0.080). The placement terms move stories; they are not part of the score.
- AI judgeJudge 2claude-haiku-5-5
- Practical, technically detailed write-up of a layered defense against prompt injection hidden in PDFs, with concrete detection techniques; mostly anecdotal and unquantified, so moderate substantiation and significance.
- AI judgeJudge 3gpt-5.6-luna
- A technically detailed engineering account of detecting PDF-based prompt-injection and document deception, with concrete defensive judges, attack examples, limitations, and false positives. It is highly actionable for AI application builders, though lacks reproducible code or measured deployment results.
Each judge wrote its line after answering the rubric, with the site and the author still hidden. Every answer behind this is in the table under Score.
Score
0.64total under rubric v2.3
- Significance0.51
- Reader interest0.75
- Audience breadth0.52
- Practical relevance0.76
- Substantiated0.58
- Technical depth0.83
- New information0.86
- Counts against: Promotional0.04
- Counts against: Overclaim0.17
Each judge’s answer per question (0–1), their mean and spread, and what the question adds to the score (weight × mean).
| Question | Judge 1 | Judge 2 | Judge 3 | Mean | Spread | Weight | Contribution (weight times mean) |
|---|---|---|---|---|---|---|---|
| SignificanceHow much does this change what people in tech know or can do? | 0.51 | 0.35 | 0.66 | 0.51 | 0.31 | +0.24 | +0.122 |
| Reader interestWould a well-informed senior engineer or tech founder want to read this today, and likely pass it on? | 0.65 | 0.70 | 0.90 | 0.75 | 0.25 | +0.26 | +0.195 |
| Audience breadthHow many people who build technology does it concern? | 0.59 | 0.40 | 0.58 | 0.52 | 0.19 | +0.13 | +0.068 |
| Practical relevanceHow useful is it to someone who builds software or tech products? | 0.75 | 0.70 | 0.82 | 0.76 | 0.12 | +0.22 | +0.167 |
| SubstantiatedHow well is it backed? Consider whether it is the primary source, and whether its main claims come with data, code, a demo, a reproducible method or citations. | 0.52 | 0.50 | 0.72 | 0.58 | 0.22 | +0.05 | +0.029 |
| Technical depthHow technically substantive is it? | 0.87 | 0.75 | 0.86 | 0.83 | 0.12 | +0.05 | +0.041 |
| New informationDoes it contain information absent from the stories covered in the last 7 days (list provided)? | 0.85 | 0.80 | 0.92 | 0.86 | 0.12 | +0.05 | +0.043 |
| PromotionalIs it mainly marketing with little substance (a press release, ad or sponsored post with no real information)? A launch post that carries real news is not promotional. | 0.06 | 0.05 | 0.02 | 0.04 | 0.04 | −0.19 | −0.008 |
| OverclaimDo the headline or conclusions claim more than the body supports? | 0.24 | 0.20 | 0.08 | 0.17 | 0.16 | −0.11 | −0.019 |
| Sum of contributions | +0.637 | ||||||
| Claim-check penalty | 0.000 | ||||||
| Total, as published | 0.637 | ||||||
Spread is the highest minus the lowest judge answer. marks a spread above 0.40: the judges disagree, and the story is marked contested.
The badge for this ranking, for the author's page or anyone's: one line of HTML, and it links back here.
<a href="https://rubric.hrih.si/editions/2026-11-08/23/"><img src="https://rubric.hrih.si/badge/2026-11-08/23.svg" alt="Ranked #23 on Rubric, 8 Nov 2026" width="238" height="28"></a>Claim check
Claim check: 8 no source given. Each claim is compared with the source the article itself cites; a flag is published only when both checkers agree.
No source givenNumber
The author's test PDF with a second earnings number hidden in white text on white was successfully read by the internal PDF-parsing tool on the first attempt.
The article gives no link or citation for it.
The article says “put a second earnings number under the first, but this one hidden in white text on white. Nailed it first time”
The source says No source to compare with.
No source givenGeneralization
Hidden text positioned outside the visible box, zero-height text and very tall text all worked as injection vectors against the author's internal tool.
The article gives no link or citation for it.
The article says “Text positioned way out of the visible box? Result. Zero-height text? Not only did that work, but I managed to surprise ol’ Claude with fantastically tall text working too”
The source says No source to compare with.
No source givenNumber
The HiddenInk judge thresholds a grayscale render into faint marks and dark ink, dilates the dark-ink mask, and flags faint connected components not explained by nearby dark ink; it catches white-on-white and near-white text, including in scans, but is blind to render-mode-3 text.
The article gives no link or citation for it.
The article says “labels any faint connected components that no nearby dark ink explains. Catches white-on-white and near-white text, including in scans with no text layer. Blind to render-mode-3 text”
The source says No source to compare with.
No source givenNumber
The Accessibility Channel judge reads declared text from /Alt, /ActualText and /E in the tagged-PDF tree and checks whether it appears on the rendered page.
The article gives no link or citation for it.
The article says “Walks the tagged-PDF tree and pulls declared text from /Alt, /ActualText and /E, then checks whether that text appears on the rendered page”
The source says No source to compare with.
No source givenCausal conclusion
Inline /ActualText substitution slips past the Accessibility Channel judge and is confirmed rather than caught by TextRasterDivergence.
The article gives no link or citation for it.
The article says “inline /ActualText that substitutes into the text layer passes this check, and, per above, TextRasterDivergence validates it”
The source says No source to compare with.
No source givenGeneralization
Combining many simple single-purpose checks gives a better defense than one check trying to do everything, following the Swiss cheese model.
The article gives no link or citation for it.
The article says “it is the combination of simple checks is a better defense than trying to do it all at once”
The source says No source to compare with.
No source givenNumber
Mythos, when pointed at the judges, identified three additional attack vectors, one of which involves Type 3 fonts, and the judge for that one rejects documents written in LaTeX.
The article gives no link or citation for it.
The article says “What about these other three vectors?” If nothing else, keeps you humble and I learned what Type 3 fonts are. The judge for that one was simple: it’s a no…”
The source says No source to compare with.
No source givenNumber
The author has not yet caught any real-world prompt injection attempts using these judges.
The article gives no link or citation for it.
The article says “I’ve yet to catch anyone in the wild so far”
The source says No source to compare with.
Also covered by
No other coverage was clustered with this story.
Elsewhere
Elsewhere: HN 1 pts, not on front page
Recorded for context only, checked 8 Nov 2026, 05:46 UTC. It played no part in the ranking.