zwesty
Write-ups / Day 29 / Metadata
Day 29 · Thu, Oct 29 · Metadata

Trust Issues (Metadata)

Prey slaughtered

X.509 certificate fingerprints (SHA-256 over the DER bytes); sorting questions into already-known, pre-built, and new fields

STTMClaude Homebase Both

Flags are shortened to their first 8 and last 4 characters because they're unique per team.

Challenge ID
metadata-forensics-day-29-trust-issues (+ /time_trial, /mastery)
Solved
2026-10-29: all three modes CORRECT on the first submit, both timed modes ranked. Single 09:00:14.3 ET, Time Trial 09:03:54.4, Mastery 09:04:06.1: 3 min 58.8 s from the Single's start (09:00:07.4) to the Mastery CORRECT, about 3½ min of it a regression rehearsal against earlier days' puzzles. 4 min 6.1 s after release
Player
Zwesty (solo), with Claude Code (Opus 5.5): our automated morning solver (a scheduled script on our Kali VM) solved all three modes on its own. The one new field was answered by a parser we had pre-built on 2026-10-16. No one worked this challenge by hand, and no code was changed

The challenge

"Certificates appear in binaries, packages, mail, captures, and disk images. Fingerprint each one, collapse duplicates, and identify the trust claim unsupported by evidence."

answer_id Question Format
d29-x509-001-x509-sha256-fingerprint "Determine x509.sha256_fingerprint for certificate-001.pem." (artifact metadata-day-29-evidence.zip -> certificate-001.pem) pattern: "exact 64-character hexadecimal SHA-256 value; use no prefix, spaces, or explanatory text"; case-insensitive

As on every Metadata day, the timed modes asked today's field together with earlier days' fields. The Time Trial had 34 questions: seven evidence-note and roster fields, 26 fields from Days 4–29 (none for Days 8, 10, and 11; two for Day 7 and three for Day 9), and the synthesis SHA-256 order. The Mastery had 13 sets of 34, 442 questions (41 distinct fields, since the roster and evidence-note fields vary by set). Today's field was the only Day 29 question in every mode.

Reading the prompt: what it said we'd need

Clue What it pointed to What the solver did about it
"Certificates" X.509 The Single held one PEM certificate
"appear in binaries, packages, mail, captures, and disk images" Certificates carried inside other formats No question asked for that. The only certificate in any mode was a plain certificate-001.pem
"Fingerprint each one" A certificate fingerprint: a hash over the DER encoding, not over the PEM text x509.sha256_fingerprint: SHA-256 of the DER bytes, lowercase hex, no colons
"collapse duplicates", "the trust claim unsupported by evidence" Grouping identical certificates; a signer or issuer claim that doesn't verify Not asked in any mode
"Trust Issues" (title) Certificates and trust Confirmed the reading

Safety

The timed evidence holds PE, ELF, Mach-O, APK, JAR, MSI, and other samples from earlier days. The solver reads them as bytes inside the VM; nothing is run. For this write-up only the saved replies, the solver's output, the archive listings, and the solver source were read.

What was in the files

  • Single Solve: metadata-day-29-evidence.zip, 672 bytes, holding one member, certificate-001.pem (709 bytes, a 13-line -----BEGIN CERTIFICATE----- block).
  • Time Trial: evidence.zip, 669,650 bytes, 26 members, among them one certificate-001.pem next to the earlier days' samples.
  • Mastery: metadata-forensics-day-29-trust-issues-mastery.zip, 9,306,086 bytes: 13 sets, each its own evidence-NN.zip with its own certificate-001.pem.

So the timed modes were the cumulative Metadata template with one certificate added per set.

Single Solve: the automated solver

The solver was running our Day 28 Metadata chain. Its first step sorted the one question as pre-built: a field never asked before, but one we already had a parser for.

Why no change was needed: on 2026-10-16, offline, we pre-built a set of certificate and signature parsers for fields that might come later. It registered X.509 fields under many name spellings, among them the SHA-256 fingerprint: the SHA-256 of the DER certificate, lowercase hex, no colons. It reads PEM or DER with its own DER reader, and its tests compare the result with openssl x509 -fingerprint -sha256. The Day 28 chain still includes it, so the field was answered the moment it appeared. The solver sends a Single on its own when every question is already known or pre-built.

Single Solve
started_at  09:00:07.4 ET (the solver's first step started it; re-fetched at 09:00:13)
deadline    none
answers     1   (the 64-hex fingerprint)
start        192 ms
artifact     261 ms   (672 bytes)
solve          1 ms
submit       893 ms
TOTAL       1347 ms   (submit +7,489 ms after started_at, counted from that first start)
result      CORRECT   flag f33fc0d9…3e5b   (09:00:14.3 ET)

Before the timed runs the solver ran a regression rehearsal against earlier days' puzzles, which passed. It took from 09:00:14 to 09:03:51, about 3½ minutes, so every later lane started late.

Time Trial

CORRECT on the first attempt, ranked (fresh variant).

started_at  09:03:52.5 ET   deadline 09:04:42.5 (50 s clock)
answers     34
start        603 ms
artifact     882 ms   (669,650 bytes)
solve        199 ms
submit      1668 ms
TOTAL       3352 ms   (submit +2,875 ms after started_at)
result      CORRECT   flag 3ced30d9…6d62   (09:03:54.4 ET)

Mastery

CORRECT on the first attempt, ranked (fresh variant).

started_at  09:04:01.3 ET   deadline 09:10:56.3 (6 min 55 s clock)
answers     442 (13 sets × 34)
artifact    +1,657 ms after started_at   (9,306,086 bytes)
solve       +4,714 ms
submit      +5,539 ms   (this run's stage total isn't recorded)
result      CORRECT   flag 28872b51…d210   (09:04:06.1 ET)

One field went in as a guess, and both timed modes still passed. The solver's output shows the Day 25 field registry.hive_root_name sent as a best-effort none ("don't know what this question asks") in the Time Trial and in the Mastery sets it lists. The output keeps only the last lines of each mode, so set 1 isn't shown. Both attempts came back CORRECT; the records don't say whether none was the expected value. (We fixed that field to be answered directly on Day 30.)

Speed boards (final boards; time = server start to solve): - Time Trial: 21st of 47, 1.925 s (fastest 0.359 s). - Mastery: 20th of 51, 4.883 s (fastest 0.949 s).

Time to solve

The Single was CORRECT at 09:00:14.3 ET, seven seconds after its start. After the 3½-minute regression rehearsal, the ranked Time Trial (09:03:54.4) and ranked Mastery (09:04:06.1) each went through on the first submit; all three modes were done 4 min 6.1 s after release.

Takeaways

  • The pre-build paid off twelve days later. The certificate parsers were written on 2026-10-16 for fields that might come; on Day 29 one of them did, and the Single went in seven seconds after the start.
  • A fingerprint is over DER, not the PEM text. The pre-build hashes the decoded certificate, and its tests check it against openssl.
  • Most of the prompt was never asked. Carriers, duplicates, and the unsupported trust claim had no questions; only the fingerprint mattered.
  • The rehearsal was the slow part. 3½ minutes before the timed modes; the solves themselves took 2 and 5 seconds.
  • A best-effort none didn't sink the timed modes here, but it was still a field the chain couldn't read; Day 30 fixed it.