My Simple Little Workflow Earned a C+

A few months ago I turned a pile of Oracle HCM PDF guides into something I could actually search. Convert each PDF to Markdown with a small tool I built, drop the Markdown into an Obsidian vault, and search it in plain language when a ticket lands. No vector database, no server, no infrastructure to babysit. It saved me real time on triage, and I wrote it up as a clean little productivity win.
Then I audited it against the same NIST standard I would use on a client system. It came back a C+. Here is why that grade is the honest one, and why the lowest-infrastructure part of the workflow turned out to be the most dangerous.
The Grade Lives in the Boring Step
When people look at this workflow, they look at Obsidian and the AI search, because that is the part that feels new. That is not where the risk is. The risk is in the step nobody looks at twice: converting a PDF.
My converter used to run on one library. Somewhere along the way I upgraded it to a newer one, IBM’s Docling, because it produced better Markdown. Better output, and a new problem I did not go looking for. Docling has a published remote-code-execution vulnerability: feed it a malicious document and it can be tricked into running code while it parses. A knowledge workflow’s entire job is to parse documents. So the one tool whose whole purpose is to ingest files I did not write is also the one carrying the sharpest edge.
That is the finding worth publishing. Not “Obsidian is scary.” The parser is scary, and the parser is the part that looked boring.
What an Honest Audit Actually Does
An audit is not a checklist you fill in to feel thorough. It is a specific method. Characterize the system, map where data and trust flow, catalog the controls that genuinely exist, work the threat scenarios, then rate the residual risk after those controls. NIST calls it SP 800-30. I ran the real thing.
The part that separates an audit from a vibe is the tool-by-tool lookup. For every named tool in the workflow, I searched live for two things: known vulnerabilities, and recent real-world incidents. Not from memory, because the threat landscape moves every week. That search is what surfaced the Docling flaw. It is also what surfaced the Ghostscript RCE that rides along in the OCR step, and the Obsidian plugin-abuse campaign that Elastic documented in April.
You can read the whole assessment for yourself: here is the full NIST SP 800-30 risk assessment , with the system characterization, the threat matrix, the per-tool vulnerability and breach lookup, and the residual risk after controls. It carries an overall grade, because a finding a hiring manager can act on needs a number, not an impression.
The Part Where the Audit Pays You Back
Here is the half of auditing that nobody talks about. It does not only find problems. It also confirms the things you did right, and it lets you say so with evidence instead of hope.
Two risks I expected to find turned out to be already handled, and the audit is what let me prove it. The Obsidian plugin-abuse campaign needs one precondition: the victim has community plugins installed and enabled. I checked the actual vault. There are no community plugins installed at all, not disabled, not present. The precondition is not met. The Ghostscript vulnerability affects versions at or below a certain release. I checked the version on my machine. It is well above the vulnerable line. Patched.
Neither of those is a guess. Each one is a fact I read off the real system and wrote into the assessment as a control in my favor. That is the difference between “I think it is fine” and “here is why it is fine, and here is what I looked at.”
Why It Is a C+ and Not an A
The letter is not a mood. It is computed from the worst residual risk the audit found, then adjusted by what is actually exploited in the wild and what controls I could verify. The Docling parser risk is High and currently open, because the dependency is unpinned and nothing in the workflow enforces that only Oracle’s own PDFs get converted. That pins the grade in the C-to-D band. The verified controls, no community plugins, a patched Ghostscript, no secret on disk, entirely local, pull it back up to a C+.
I could have made it look like an A by only describing the tidy parts. The tidy parts are real. So is the parser. A grade that ignores the parser would be the kind of clean sheet I do not trust when I see it on someone else’s work, so I will not put my name on it for my own.
What I Want You to Take From This
If you build a workflow that ingests files, audit the ingestion step first, not last. The interesting-looking parts, the AI, the search, the automation, are usually not where the exposure lives. The exposure lives in the quiet tool that opens documents you did not write. That is the one to pin, to sandbox, and to feed only from a source you trust.
The workflow still saves me time every day. I just know exactly what it costs now, down to a letter and the reasons behind it. The productivity post was the build. The audit is what made it safe to keep.