Pith. sign in

REVIEW 3 major objections 5 minor

From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers

T0 review · 3 major / 5 minor · reviewed 2026-08-10 · deepseek-v4-flash

Pith's one-line read PDFuzzer claims that complex, value-coupled JavaScript call sequences produced from LLM-inferred API relationships and SMT solving find far more vulnerabilities in PDF readers than prior fuzzers.

desk verdict A serious, well-evidenced fuzzing paper whose 31 zero-days and coverage gains are credible, but the headline comparison overstates what is shown because competing fuzzers run only as generators under one shared wrapper. read the letter →

arxiv 2608.06641 v2 pith:5YJAYKU7 submitted 2026-08-06 cs.CR cs.SE

classification cs.CRcs.SE
keywords fuzzingPDFreadersJavaScriptenginesLLM-driventestgenerationAPIrelationshipinferenceSMTconstraintsolvingzero-dayvulnerabilitydiscoveryclosed-sourcesoftwaretesting
verification ladder T0 review T1 audit T2 compute T3 formal

The pith

A machine-rendered reading of the paper's core claim, the machinery that carries it, and where it could break.

The reading

This paper argues that existing fuzzers for JavaScript engines inside PDF readers leave vulnerabilities undiscovered because they generate mostly standalone API calls and only recognize a narrow, type-based dependency between calls. PDFuzzer is a fuzzer that uses an LLM to turn API manuals and execution traces into full specifications for both documented and undocumented APIs, infers three kinds of relationships between API calls (producer-consumer, value-constraint, and implicit shared-state), and uses an SMT solver to produce concrete call sequences that satisfy those relationships. The authors report that this approach reaches up to 48% higher code coverage than prior fuzzers on Adobe Acrobat Reader, Foxit PDF Reader, and PDF-XChange Editor, and that over a two-week campaign it found 31 zero-day vulnerabilities while the best baseline found 6. The contribution is the claim that complex, value-coupled sequences, not individual calls, are what expose serious bugs in these closed-source engines.

What carries the argument

The central mechanism is a two-tier relationship model plus a four-stage generation pipeline. The two tiers are candidate relationships (co-occurrence only) and strong symbolic relationships, which carry SMT-LIB2 constraints and an optional ordering requirement. Strong symbolic relationships are classified as producer-consumer (a return value feeds another call's parameter), value-constraint (parameters must satisfy equality, set membership, range, or ordering constraints), or implicit (calls interact through shared reader state). PDFuzzer's pipeline extracts documented API specifications with a regex parser, recovers undocumented API signatures via differential analysis and enriches them with an LLM, builds a per-parameter context-free grammar for each API, uses retrieval-augmented generation plus a two-stage LLM pass to infer relationships, then instantiates calls and uses Z3 to solve the symbolic constraints into concrete sequences. The paper's key design choice is to keep LLM semantic reasoning separate from SMT constraint solving, and to generate grammars parameter-by-parameter so fine-grained value constraints are not flattened out of long API specifications.

What would settle it

Take the 31 minimized crash-triggering test cases and re-run each under PDFuzzer with Z3 constraint solving disabled but the same API call sequences; if most crashes survive, value-constraint solving is not the decisive ingredient. Separately, probe a sample of Foxit and PDF-XChange APIs to see whether the parameter constraints from Adobe's manual match the values those engines actually accept; a large mismatch would invalidate the cross-engine reference-specification assumption.

Watch

Extended reading notes

Core claim

On the paper's own terms, the discovery is that value-constraint and implicit relationships between JavaScript API calls can be extracted automatically and turned into executable test cases, and that doing so changes fuzzing outcomes. Of the 1,019 strong symbolic relationships PDFuzzer inferred, 87% were value-constraint, 6.2% implicit, and only 6.8% producer-consumer, which is why the paper judges producer-consumer-only tools insufficient. The paper demonstrates this with the Foxit use-after-free test case in which app.popUpMenuEx's cName and search.query's cQuery must be the same string, a coupling that name-similarity and return-value matching both miss. PDFuzzer's claim is that with this relationship model, 31 zero-day vulnerabilities can be found in three mainstream readers, 11 with potential for arbitrary code execution, and 26 already fixed by vendors at the time of writing.

Load-bearing premise

The load-bearing premise is that Adobe's JavaScript API manual accurately describes the JavaScript engines in Foxit PDF Reader and PDF-XChange Editor; if those engines diverge from Adobe's semantics, the inferred grammars and constraints would generate invalid sequences for two of the three targets.

Editorial extensions

If this is right

  • Fuzzers for other closed-source, scriptable applications should shift from isolated-call generation to relationship-aware sequence generation; the paper's ablation attributes up to 15.5% coverage gain to value-constraint and implicit relationships beyond producer-consumer-only settings.
  • Undocumented APIs become fuzzable targets rather than gaps: combining trace-derived signatures with LLM specification inference yields up to 28% higher coverage than type-only inference.
  • Parameter-level grammar generation is load-bearing; the paper reports that function-level grammars lose enumerated value sets and cost 5-18% coverage.
  • The method generalizes beyond JavaScript: the authors extract 2,925 VBA APIs from Microsoft Word's documentation and generate grammars for all of them, pointing toward fuzzing Office macros with the same pipeline.
  • Coverage is stable across LLMs: swapping GPT-4o for o3-mini or Claude-3.7-Sonnet changes coverage by under 1% on Adobe Acrobat Reader, so the approach does not depend on one particular model.

Reading between the lines

Editorial extensions of the paper, not claims the author makes directly.

  • An untested consequence is that most of the benefit may come from simple equalities: since 75.2% of value-constraint relationships are direct equalities, a lightweight generator that reuses concrete strings across similarly named parameters could capture a large share of the reported gains without an LLM or SMT solver.
  • The 64% instantiation success rate for implicit relationships suggests shared-state preconditions are the bottleneck; explicitly modeling event and state machines inside the reader could raise that rate and yield further coverage gains.
  • The 93-98% LLM accuracy figures rest on 60 sampled outputs per stage, so they are estimates with wide uncertainty; a follow-up that degrades relationship-inference accuracy artificially would show how much of the 31-vulnerability count depends on inference quality.
  • The poor output quality of the general-purpose LLM fuzzer (mostly C, Java, or plain text) indicates that generic LLM fuzzing without domain-specific specification extraction is ill-suited to this target, but it also implies improvements to generic harnesses could one day close the gap.
Share X Bluesky LinkedIn Reddit HN

Signed reviews

No signed human review yet.

Editorial analysis

A structured set of objections, weighed in public.

Desk editor's note, referee report, and a circularity audit.

Referee Report

3 major / 5 minor

Summary. The paper presents PDFuzzer, a fuzzer for the JavaScript engines embedded in PDF readers. PDFuzzer extracts API specifications from Adobe's JavaScript API manual and from execution traces, uses LLMs to generate parameter-level context-free grammars and to infer three classes of inter-API relationships (producer-consumer, value-constraint, and implicit), and then uses the Z3 SMT solver to generate concrete API-call sequences that satisfy the inferred constraints. The generated JavaScript is embedded into PDF documents and executed against Adobe Acrobat Reader, Foxit PDF Reader, and PDF-XChange Editor. The evaluation reports up to 48% higher basic-block coverage than prior tools, 31 zero-day vulnerabilities over a two-week campaign, and ablations showing that specification inference, parameter-level grammars, strong symbolic relationships, and PDF-object integration each contribute to coverage.

Significance. If the results hold, this is a useful contribution to API-level fuzzing: it automates specification extraction from natural-language documentation, models relationship types beyond producer-consumer dependencies, and demonstrates concrete security impact with 31 reported vulnerabilities, including CVEs and vendor bounties. The paper's strengths include a broad evaluation across three commercial targets, a two-week vulnerability campaign, a component-wise ablation study, spot-check evaluations of LLM accuracy (93-98%), and a public artifact link. The main caveat is that the comparison against prior fuzzers is scoped to test-case generation under a common wrapper rather than to the released full fuzzing systems, so the headline claims need to be tempered or supplemented.

major comments (3)
  1. [§5.2, Figure 2, Table 1] The evaluation compares only test-case generators, not the released fuzzing systems. Section 5.2 states that TypeOracle's public wrapper is used uniformly for all methods and that the evaluation does not compare online fuzzing loops. Cooper and Favocado, however, ship with their own mutation, corpus, and scheduling logic, which is discarded here. The abstract and Section 1 claim that PDFuzzer 'significantly outperforms state-of-the-art PDF fuzzers' and report '31 vs at most 6' vulnerabilities; these claims are not established for the full tools. Please either add a comparison that runs Cooper, Favocado, and TypeOracle with their native loops, or revise the contribution and headline claims to state explicitly that the comparison is among test-case generators under a common execution harness.
  2. [§6.1, Figure 2] Coverage results are reported only as means over five runs, without standard deviations, confidence intervals, or per-run data points. The claim that PDFuzzer 'significantly outperforms' baselines by 15-48% is therefore not statistically supported, and some of the smaller gaps in Figure 2 (for example between PDFuzzer and TypeOracle+Favocado on Adobe) could be within run-to-run variation. Please report the variance or provide the per-run coverage values.
  3. [§4.3] The pipeline uses Adobe's JavaScript API manual as the reference specification for Foxit PDF Reader and PDF-XChange Editor, with the justification that both implement Adobe's de facto standard. This assumption is load-bearing for two of the three targets: if those engines diverge in parameter semantics, value-constraint, or implicit relationships, the inferred grammars and constraints would produce invalid sequences and the coverage and vulnerability results for Foxit and XChange would be affected. The empirical finds in Foxit partially mitigate this concern, but the paper should validate API compatibility more directly, for example by checking a random sample of inferred invocations against each engine's runtime behavior or by documenting known divergences.
minor comments (5)
  1. [Abstract] The phrase 'requiresequencesof API calls' is missing spaces; similar formatting spacing issues occur throughout (e.g., 'PDFuzzercan', 'PDFuzzeris', 'TypeOracle’srandom'). A copyediting pass would improve readability.
  2. [§3.2] The sentence 'the constraints can be broader that equality' should read 'broader than equality'.
  3. [§5.2] The phrase 'Because our targets are closed-sourced' should be 'closed-source'.
  4. [Figure 2] The coverage plots would be more informative with error bars or shaded confidence bands, especially since coverage is reported as a mean over five runs, and with a consistent legend across all six panels.
  5. [Table 1] The table uses '...' to denote omitted rows in several places. Please ensure the published version contains the complete table with all 31 entries, or clearly indicate the truncation.

Circularity Check

0 steps flagged · score 1.0 of 10

No circular derivation: the reported coverage and vulnerability results are empirical outputs of an LLM-plus-SMT generation pipeline, not consequences of fitted parameters or self-referential definitions; self-citations to TypeOracle are transparent component/baseline reuse and are not load-bearing circular evidence.

full rationale

The paper's central claims are empirical: PDFuzzer achieves up to 48% higher coverage and finds 31 zero-day vulnerabilities. These outcomes are measured after test-case generation and execution, not derived from equations or from fitted parameters that are then renamed as predictions. The LLM-inferred specifications, grammars, and SMT constraints are constructed before execution from documentation and execution traces; nothing in the pipeline is fitted to the vulnerability or coverage outcomes. The main self-overlap is TypeOracle [24], used both as a component for undocumented API signature extraction (Section 4.3, Stage 1) and as a baseline (Section 5.2). This is transparently disclosed, and the ablation table explicitly compares against TypeOracle, TypeOracle+Cooper, and TypeOracle+Favocado, so the comparison does not reduce PDFuzzer's advantage to a self-citation chain. The one minor self-citation in Section 4.3 ('Adobe's JavaScript API has become the de facto standard for PDF JavaScript engines, and Foxit and PDF-XChange both implement it, as noted in prior work [24]') is not load-bearing because the paper independently demonstrates the premise by finding real vulnerabilities in Foxit and PDF-XChange using Adobe-derived specifications. Section 5.2's decision to compare only test-case generators under a uniform TypeOracle wrapper is a scoping limitation for the headline 'outperforms state-of-the-art fuzzers,' but it is an evaluation-fairness concern, not circularity: the generator outputs are not defined in terms of the measured coverage or crash outcomes. No step in the derivation chain reduces by construction to its own inputs.

Assumptions & free parameters 2 free parameters · 5 assumptions · 0 invented entities

The paper introduces no new physical or mathematical entities; 'value-constraint relationship' and 'implicit relationship' are taxonomical concepts, not postulated objects. The central claim rests on the five domain assumptions above; none is machine-checked, and none is independently falsifiable outside the reported experiments. The two configurable hyperparameters listed are the most consequential hand-set numbers in the generation pipeline.

free parameters (2)
  • max_sequence_length = 2000 API calls
    Configurable upper bound on generated call-sequence length, set by hand in Section 4.6 based on empirical execution-time concerns; it directly affects the space of sequences explored.
  • targeted_mutation_fraction = 15% of generated test cases
    Share of test cases receiving malformed-input mutation in Section 4.6 Stage 4; chosen by hand and influences robustness-triggered crashes.
assumptions (5)
  • domain assumption Adobe JavaScript API manual is a valid reference specification for Foxit and PDF-XChange
    Section 4.3 states Adobe's API is the de facto standard and that Foxit and PDF-XChange implement it; if their APIs diverge, the inferred grammars and relationships for two of the three targets are invalid.
  • domain assumption LLM-inferred specifications, grammars, and relationships are sufficiently accurate for valid test generation
    The pipeline trusts LLM outputs (93-98% spot-check accuracy in Section 6.6) to produce syntactically and semantically valid API invocations; errors propagate into test quality.
  • domain assumption TypeOracle differential analysis yields correct raw signatures for undocumented APIs
    Section 4.3 Stage 1 relies on TypeOracle's operand-variation analysis to recover object/method names and parameter types; incorrect signatures would mislead the LLM specification inference.
  • domain assumption DynamoRIO basic-block coverage is a valid, comparable measure of exercised code under the uniform wrapper
    Section 5.2 uses DynamoRIO dynamic instrumentation on closed-source readers; the assumption is that this metric captures meaningful code exploration and is equally fair across all tested generators.
  • domain assumption Normalized call-stack signatures group crashes into distinct vulnerabilities
    Section 6.2 deduplicates the 57 crashing inputs into 31 unique vulnerabilities by comparing normalized call-stack signatures; if the signature similarity threshold is coarse, distinct bugs could be merged or split.

how reviews work

0 comments
Cite this review

Pith. "Pith review of From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers." pith.science (2026). https://pith.science/paper/5YJAYKU7

@misc{pith2026260806641,
  author       = {Pith},
  title        = {Pith review of: From Documentation to Zero-day Vulnerabilities: LLM-Driven Fuzzing of JavaScript Engines in PDF Readers},
  year         = {2026},
  howpublished = {\url{https://pith.science/paper/5YJAYKU7}},
  note         = {Machine review of arXiv:2608.06641}
}
read the original abstract

Existing fuzzers for PDF readers rely on simple test cases that involve only individual API calls, leading to limited coverage and potentially missing vulnerabilities that require sequences of API calls. To address these limitations, we propose PDFuzzer, a novel PDF engine fuzzer that automatically generates complex and meaningful API call sequences. PDFuzzer first uses a Large Language Model (LLM) to construct context-free grammars and infer the relationships between individual API calls from specifications extracted from JavaScript API manuals and execution traces. Based on the grammars and relationships, PDFuzzer employs a constraint solver to generate concrete API call sequences for fuzzing. Our experiments show that PDFuzzer significantly outperforms state-of-the-art PDF fuzzers (TypeOracle, Favocado, and Cooper) and LLM-based fuzzers (Fuzz4All, naive LLM) on three mainstream PDF readers: Adobe Acrobat Reader, Foxit PDF Reader, and PDF-XChange Editor. PDFuzzer achieves up to 48% higher coverage than existing tools and identifies 31 zero-day vulnerabilities in these readers, from information leakage to arbitrary code execution. Our ablation study validates the necessity of each component, including LLMs, which achieve high accuracy across all pipeline stages (93-98%). We disclosed all vulnerabilities to the vendors via a coordinated vulnerability disclosure process and received bug bounties.

Figures

Figures reproduced from arXiv: 2608.06641 by the authors.

Figure 1
Figure 1. Overview of PDFuzzer. Documented APIs are extracted by the API Manual Parser; undocumented APIs are recovered by Specification Inference from execution traces. Both Doc spec and Undoc spec feed Grammar Generation and Relationship Inference in parallel. Their outputs (per-parameter CFGs and symbolic constraints) drive the Test Case Generator, which additionally consumes Sample PDFs for native-object templates. The re… view at source ↗
Figure 2
Figure 2. (Top row) PDFuzzer vs. traditional tools. (Bottom row) PDFuzzer vs. LLM-based tools. inputs in two steps. First, for each test case, we performed statement￾level reduction by iteratively deleting JavaScript statements and keeping the smallest subset that still reproduces the crash. Second, we deduplicated the minimized crashes by comparing normalized call-stack signatures, following TypeOracle [24] and Cooper [63]. … view at source ↗

Discussion (0). Continue with ORCID to comment.

Pith tools

Reviewed August 10, 2026 · model on record in the stance chip above.