Also, not trying to take shots, but should the title be "I got into YC Startup School by hacking it" instead? Isn't that different than the main YC program?
All in all, you did them a solid by finding and responsibly disclosing. Nice job.
I checked the Paxel website and it says this:
> So far, 1,543,553 sessions have been uploaded and analyzed.
The count is for sessions, not coders. I assume the tool uploads a lot of sessions from each person who uses it.
That’s a large number, but it’s not a million different people. I am surprised that so many people think it’s a good idea to download a run a program which gathers up their coding sessions and submits information about them.
Some hands you have to fold, and I'm folding this one. Patiently waiting for the "let's give all our data to a single AI user" bubble to bust with some massive exploits.
Perhaps running the script outside a heavily sandboxed system should trigger an automatic rejection.
"At the end of research-heavy sessions, add a tiny closure note:
Decision: Use CacheMountStore with registry/local/GHA backends.
Why: GHA cannot expose the same content.Ingester path, local import has discovery issues, registry can resolve by tag.
Proof / current artifact: See files X, Y, Z. Subagent found A, B, C.
Next action: Implement interface in package N. Do not add new cache-mount flags yet. Use mode=cache-mount on existing cache flags."
There's no need for this, Claude is not my task tracker.
It also penalized me for:
- Using Claude to introspect a codebase as throwaway work and ` not close with a crisp “acceptable / risky / copy this / avoid this” decision this session.`. No action was needed, it wasn't an actionable session!
- Using Fable for code review. `Several BuildKit subagent sessions produced research reports, but the transcript does not show whether those findings became implementation choices.` Yes, Fable launches subagents to code review. Valid findings get turned into fixes or WONTFIX.
- `The Cloudflare CI upload failure got narrowed well, especially after you supplied the exact timestamp and challenged the /v2 routing recommendation, but the session ended without a chosen next diagnostic owner or action this session.` There's no need to pick a next diagnostic owner when I'm a solo founder with no employees.
I'm choosing not to attach a report to my application. As a side note, nobody needs to see "my greatest crashout", it's embarrassing enough for me to see it for myself, much less show others.Feels like a disaster waiting to happen.
> I should run a script, a very easy-to-use cURL one-liner that installed something on my computer and analyzed every line of code I’ve written with a coding agent, compile a report, and upload it to YC’s servers.
Yikes! I hope this is NOT the future of hiring.
Sadly, it looks like they took that question off the application though.
> I should run a script, a very easy-to-use cURL one-liner that installed something on my computer and analyzed every line of code I’ve written with a coding agent, compile a report, and upload it to YC’s servers.
This is ridiculous. Any kind of application (job, startup school, whatever) should not do this. Honestly, wtf is YC thinking with this?
Alright, my ears are wide open. Tell us more, how did YC use the private submission data from thousands of founders to score them? They fed some 3rd-Party AI all personal data to score who should get an interview? I can't be the only one here seeing a bad news story unfolding in real time...
so i’m not at all surprised at how it is used and by whom.
I don’t know how much it’s actually used to rate people. Rating anyone based on how they work instead of the results produced is an age-old mistake though.
They want people who do what they say and don't challenge them?
Supposedly this is what it does from the opening comment
# Paxel upload script
# ===================
#
# What this does (up to 17 steps):
# On your machine
# 1. Check Docker is installed and running
# 2. Sign you in (browser-based device auth)
# 3. Pull or build the Paxel Docker image
#
# Inside the container — file bodies stay local; only aggregate metrics +
# metadata (paths, commit numstat, session events) are uploaded
# 4. Discover projects and sessions (Claude Code, Codex CLI, Cursor)
# 5. Read your git history
# 6. Parse transcripts
# 7. Summarize each session (cloud Haiku via YC proxy)
# 8. Group git commits by session
# 9. Group sessions into multi-day work streams
# 10. Extract steering traces
# 11. Extract decision exchanges (cloud Haiku)
# 12. Redact code before upload (regex pattern redaction)
# 13. Link decisions to outcomes
# 14. Analyze code quality (L1 deterministic)
# 15. Score episodes across 5 axes (cloud Haiku)
# 16. Assemble your report
# 17. Upload redacted summaries + scores to the server
#
# Then: opens your results in the browserFrom their perspective, it's code running on an untrusted third person/adversary's computer... If only last 40 years of computer history could be any guide as to what might go wrong here ..
I also got this,
> A useful next habit is to end each correction with a concrete acceptance test, owner artifact, or stop condition: “write it into PROGRESS.md,” “make nix run .#bench fail until this is real,” “rerun this exact command,” or “do not proceed until these two choices are explicit.”
> You already do this well in the biggest penance sessions. Apply it to the smaller ones too.
Which I have found to be counterproductive in my personal work. Current models can generally infer acceptance tests of this level of granularity (not true for larger project-level prompts, but those don't produce good enough code for me yet -- even with specific acceptance criteria).
I also got penalized for using claude in read-only mode for the same validation reason?
> For read-only work, end with one of:
“turn the top finding into a PR-sized plan”
“mark these as accepted/rejected/deferred”
“write a cleanup checklist”
“give me the exact command I should run safely”
“stop, no action recommended”
No thanks, I'm literally just exploring the codebase. I don't want any of these.It's a little sad to be honest, I would actually enjoy a product that helped me improve prompting + ai usage.
It uploads only the AI coding agent transcripts in the directories you explicitly run the upload script in.
https://youtu.be/B246K_G7mHU?si=UVJei9Jpk7ZvREnH&t=1483
https://youtu.be/B246K_G7mHU?si=ikHZD4MwxA5JtXLj&t=1716
I understand that YC and startups in general have less incentive to worry about security because they don't have much to lose. But I think the big winners will care about security from the start, because it's a bottleneck at the top, what would whatsapp be if they vibecoded security from day 1? It would never have been able to fix its reputation after the fact.
They then switch the topic and talk about token spend and how one can spend millions or billions of dollars in tokens, so it's a bit clearer what their incentives are.
I don't want to be negative and personal, but this is business, I listen to CEOs like Garry Tan and Satya Nadella, and I feel that I'm on an opposing team, my personal bet is to skip this cycle and wait for the next cycle of CEOs. I'm focusing a lot on security on this cycle, hopefully that will pay off.
That's nice framing. I believe the goal of American business culture (in general) is to do a much to users as possible, and do as little for users as they can get away with. Silicon Valley is the dumb partner who tends to say the quiet part loud.
but once you have some money (like >5m which is achievable), you can throw it around a bit and you just need a handful of success stories built by someone actually talented.
then you take credit for it and craft a narrative instead, which is easier just like collecting management fees instead of building something yourself.
;)
>curl -fsSL https://paxel.ycombinator.com/upload.sh | bash
Point in case.
Trustworthy people will ask you to give them the right amount of access, they won't ask you for infinite access and ask you to trust them that they won't use it. Would you trust a contractor that asks for root, and your master password when they could have requested a specific user or some specific files?
Obviously it’s not something everyone is going to be comfortable sharing, but YC is transparent about what is shared and how it’s used.
Edit:
I now see you have to explicitly run it in every directory you want shared - i.e., it doesn’t t scan your whole disk looking for stuff to upload. So there’s every opportunity to limit what it uploads to only what you want to share.
Edit:
I’ll add this point as people always seem to want to raise the spectre of YC or the AI platforms stealing people’s code or ideas via these sorts of tools.
The value of any code or ideas is immaterial compared to the value of identifying talented people who can then be offered opportunities such as attending Startup School, being funded by YC, getting jobs at YC-funded companies or YC itself.
It’s one of pg’s oldest dictums, that ideas alone are worthless, and only working products and the people that build them are worth anything. Nobody at YC thinks any differently about that these days.
1. Yes you can audit client side and network interface, but not server side.
2. does 'curl $URL | sh' invite users to audit? Or to trust blindly? It's the equivalent of presenting a contract with 'sign here' stickers and pushing you to sign it quickly like it's nothing. Does not signal trustworthiness.
>I’ll add this point as people always seem to want to raise the spectre of YC or the AI platforms stealing people’s code or ideas via these sorts of tools.
>The value of any code or ideas is immaterial compared to the value of identifying talented people who can then be offered opportunities such as attending Startup School, being funded by YC, getting jobs at YC-funded companies or YC itself.
>It’s one of pg’s oldest dictums, that ideas alone are worthless, and only working products and the people that build them are worth anything. Nobody at YC thinks any differently about that these days.
I do agree and share this point, ideas are worthless. But this doesn't deal with ideas, it deals with code, which as a software startup I don't feel the need to convince you of its value and the risks of leaking it. If you think your code is worthless, close your startup.
By many definitions, prompts are source code, and what we used to call source code is now target code. So this indeed does leak your source code. It's not just an IP blunder to leak your source code this carelessly, but it's a security blunder to do so. "But Kerchoff's principle.." no, Kerchoff's principle is that you should design your system as if source code were public, not that leaking source code has no negative security effect.
Also, is it possible that YC is taking advantage of the 'your ideas are worthless' dictum? Just share your ideas with YC, they are too big to care about your stupid idea. But they are gathering intel on over hundred of thousands of startups, and the ratio of applicants to fundings is continuously going down.
And sharing your idea with a single potential investor, isn't the same thing as submitting your idea (and implementation details), to a system built by people who don't give a shit about internals or security, and that use third party tools and services from different countries to process your data in ways that they don't give a fuck either.
What guarantee do you have that by using YC's vibecode data gathering tool, your data won't end up in a training set that will make it easier for a competitor with the same idea as you to find your solution?
A decade ago maybe your idea was worthless and joining YC was a contrarian bet. Nowadays, this data is clearly worth something, and applying to YC is as mainstream as applying for a job, and both of these mainstream 'apply for a 0.1% chance at the privilege of working with us' tend to grow completely asymmetric and exploit the underdog as much as they allow themselves to be exploited.
The entire purpose of Startup School for YC is to build great relationships with the most promising talent. The scale and cost of the event is vast, and the benefits for attendees are huge.
It’s a three day event with main-stage interviews with several top figures in the tech world and many other intimate events with YC partners, industry experts and fellow attendees. Much of the effort in organizing the event is maximizing the chances that attendees will meet other attendees with things in common so they can build relationships and maybe work on important projects in the future. Of course, YC hopes to be able to fund the most promising startups that come out of this, but nobody is obligated to apply to YC or take YC funding if it’s offered.
What I’m trying to convey here is that it’s in YC’s utmost interests to build trust and earn respect from the people who are participating in these programs, and there is no way in a million years that some code or implementation detail exposed in a chat transcript is going to be more valuable than building very positive, mutually trusting relationships with all participants and applicants over the long term.
What's more important, the code? or the source?
It's the source. The mistake thousands of people are making is that the source no longer looks like code, and the target code now looks like what source code used to be. They are looking at the aesthetics instead of the fundamentals.
tldr: I uncovered Y Combinator was scoring 100k+ founders around the world through Paxel, I broke it (possible easter egg) + found a vulnerability that let anyone forge and push any score to their ranking database, courtesy of an unvalidated hmac
Latest update: YC admirably, didn’t mind. In just a couple hours after first-public-disclosure Jared Friedman himself replied, announced the patch, and invited me to attend the Startup School in SF this summer! I’d also disclosed it in private through email 12 days earlier to no response. But publicly at least the process works.
this is a re-write of an earlier draft where I first made the disclosure public. it was badly written, sleep-deprived and I didn’t feel good enough about it to publicize
— — —
It all started early June, when I found the application form for Startup School 26’ (referred by Dhanush: shoutout Audora S26, incredible stuff coming!!). I found that this year, YC wanted me to use something called Paxel on my computer as part of the application.
I should run a script, a very easy-to-use cURL one-liner that installed something on my computer and analyzed every line of code I’ve written with a coding agent, compile a report, and upload it to YC’s servers.
Paxel’s main site tells me the main feature is I get to “visualize” my work and get assigned fun attributes like “Which archetype are you?” and “What’s your biggest crashout?” That sounded fun.
But I wanted to know exactly how it did that, and when my curiosity starts creeping into obsessive territory it’s basically a toss-up that either ends in a legendary crash-out or doing something great. thankfully, in this case it was the latter.
I also can’t lie: I really wanted (or needed) to hack it. I knew I was starting from a disadvantage when filling out my application (no formal, ivy league education), but I knew this would be a fast-track, surefire way into confirming my acceptance. I’m not delulu, I knew it would be insane if I was able to do it, but why not go all in?
Based on Paxel’s own site, 1.2 million+ coders have so far uploaded their reports to YC. And seeing those numbers it’s honestly shocking I was the first person in the world to figure and break all of this.
— — —
As a side note before I get into it, I think the relative achievement of a “hack” in the world has diminished manyfold since agent-capable LLMs have arrived. That of course, pars with reality because of how much easier LLMs have made doing those. But I do think that ease is somewhat overestimated, both because of the many strange blindspots they have as well as the lack of a certain “hacking” or combative approach to intelligence. Whether that’s because of safety-neutering or simply the way they’re trained is a discussion for another time.
So although what they’re world-changing at is helping you go through the same material in 10x, and sometimes 50x less time (research, investigation), it is often a struggle to communicate with LLMs and keep your own mind sharp and independent when LLMs insist everything hackable is not — with near-perfectly plausible logic.
— — —
Paxel has an incredible UX, everything it does is handled from a single one-liner curl -fsSL https://paxel.ycombinator.com/upload.sh | bash. It will automatically scan your entire system, prompt you for questions, and handle the upload — you don’t have to worry about a thing after.
So the first starting point, naturally, was this install script. I first split it into 4 separate modules. When I tried breaking it in full every LLM I gave it to started hallucinating really badly (context window size increases are not perfect!)
The install script, turns out, actually didn’t run on its own. It downloaded an entire docker image hosting a ruby app, unwrapped that, and ran it locally through the docker installed on your computer. So the app is actually divided into two parts:
① ─▶ upload.sh 302KB install script. Handles auth, discovers projects, extracts git history, and initializes docker
② ─▶ the ruby app unwrapped from a docker image. it runs the actual full pipeline per-project.
And this is where I found that every piece of work you’ve done has been graded, scored, ranked by YC, and 1.2 million reports on earth’s coders have been compiled.
| execution_leverage | steering | engineering_quality | product_thinking | planning |
These are the core 5 axes the LLM grades you on and assigns a score between 1-10 with free-text notes.
And this, is also where I found the most gaping vulnerability. See, this program is a very good example of a distributed/decentralized app (not everything has be to ran and consolidated on a proprietary server).
But the thing about decentralized apps is they rely heavily on some very basic functions of cryptography. And this pipeline lacked a very, very important one.
The LLM proxy, along with each episode returns a nonce , and this nonce is shared between the LLM servers and upload server. Theoretically, this should be passed from LLM ─▶ local ─▶ POST /v1/results which validates that none other than an original LLM result is accepted by the endpoint.
Theoretically.
What did happen though, is this nonce failed to encode a signature of the LLM’s results, scores, and notes so even though it did validate the nonce (server correctly rejected requests with invalid or missing nonce, and burnt after one use), the missing signature meant the entire episode and its score could be changed to whatever and uploaded to YC.
And YC accepted it.
Not only accepted, but if I buffed the score or changed notes, the report of the same exact project differed wildly.
exact same project, exact same chats.
And I took it a step further. With the same one-liner (I love Paxel’s UX!!) I made paxel-boosted, a hack that let anyone in the world upload forged reports the same by launching a mirroring tool. Self-sponsored the boosting proxy because needing to add env is terrible user experience.
obaid.wtf — bash — boosted-paxel
For the couple hours from publicization to YC announcing the patch, over 20 of my users were able to rank themselves as the world’s top 1% in YC’s database.
two functions of basic cryptography were missing.
blue+green fields need to be signed in the hash. green fields sealed and encrypted as well
We could categorize all the fields accepted by /v1/results into 3 categories (two being important, one covering all others), as visualized above.
1) fields that are passed near-verbatim from LLM ─▶ /v1/results (green+blue-highlighted in the graphic above), these should have all been rolled and hashed together into the nonce as an hmac. Nonces were already validated, and this would make sure each nonce was actually tied to the LLM’s responses.
nonce = hmac(request_id) ─▶ nonce = hmac(request_id + scores.steering + scores.product_thinking + ... + title)
and this is actually the patch YC did deliver and announce, pretty much exactly as I suggested in the original draft.
2) that are (1) passed near-verbatim from the LLM ─▶ /v1/results AND (2) also never used within the client. A subset of the fields above (green-highlighted in the diagram), these should be encrypted with any AEAD cipher (or asymmetric pub/priv keys) only the servers possess and share so the client can’t see details like the 5-axes scoring, episode title, and notes.
This one is optional and is essentially obscurity, but if it had been done from the start, I could have never known what to sniff, what to change, and it would have covered the most serious of impacts from the first vulnerability —
— — —
It’s possible that this entire “vulnerability” was a secret easter egg to find out who could hack it, or a honeypot that didn’t throw a validation error but secretly monitored who discovered and was “hacking” around it, but looking at the way this pipeline and Paxel seems to be written makes me think that’s likely not what it was.
Now, since Jared’s reply this has obviously been patched but my tool is still helpful in showing you your raw scores! Feel free to check it out.
if you’ll also be in SF next week (21 jul - 6th aug) around the Startup School dates feel free to reach on Linkedin or Twitter with a tip for places, events, or people where i can find my next co-founder to build something timeline-changing with — and we can connect.