Reverse engineering a $1B Legal AI tool exposed 100k+ confidential files
TL;DR Highlight
Filevine's legal AI SaaS had a public API endpoint returning Box admin tokens without auth, exposing 100K+ confidential files from law firms.
Who Should Read
Security engineers and backend devs building SaaS products with third-party OAuth integrations, and CTOs evaluating legal AI vendors.
Core Mechanics
- Filevine had a publicly accessible API endpoint that returned Box admin tokens without any authentication — a classic insecure direct object reference issue on a privileged token endpoint.
- The exposed tokens gave access to Box admin accounts belonging to law firm customers, meaning confidential legal documents (over 100K files) were readable by anyone who hit the endpoint.
- The researcher reported the vulnerability responsibly, but initial response from Filevine was slow. The issue was eventually patched.
- This is a textbook OAuth token storage failure: the server-side tokens were returned client-side with no authorization check on the caller.
- The attack surface is especially sensitive here — legal SaaS products hold privileged client communications, case files, and court documents that carry attorney-client privilege.
Evidence
- The researcher documented the endpoint, sample request, and sanitized token response, confirming the unauthenticated access was trivially reproducible.
- Community reaction was strong: several commenters noted this is a systemic problem with 'move fast' SaaS culture when applied to high-sensitivity legal data.
- Others pointed out that law firms face ABA ethics rules around client data confidentiality — a breach like this could expose firms to bar complaints in addition to legal liability.
- There was debate about whether Filevine's response timeline was acceptable for a security incident of this severity.
How to Apply
- Audit all endpoints that return OAuth tokens or third-party API credentials — verify that caller authorization is checked, not just authentication.
- Never store third-party admin tokens in a way that's retrievable via a user-facing API without checking the requester's permission scope.
- For legal/medical/financial SaaS: treat third-party integration tokens as secrets with the same access controls you'd apply to raw credentials.
- Add automated tests for your most sensitive API endpoints that explicitly verify unauthenticated requests are rejected with 401/403.
Code Example
// Vulnerable pattern: frontend directly receives a high-privilege token and calls external API
const res = await fetch(`${BOX_SERVICE}/recommend`, {
method: 'POST',
body: JSON.stringify({ projectName: 'Very sensitive Project' })
// No Authorization header!
});
const { boxToken } = await res.json(); // admin token is returned as-is
// Safe pattern: backend acts as proxy or issues short-lived presigned URLs
// Backend (Node.js example)
app.get('/api/file/:fileId', authenticate, async (req, res) => {
// 1. Verify user permissions
const hasAccess = await checkPermission(req.user, req.params.fileId);
if (!hasAccess) return res.status(403).json({ error: 'Forbidden' });
// 2. Call Box API using a token stored only on the backend
const boxClient = new BoxClient({ accessToken: process.env.BOX_ADMIN_TOKEN });
const downloadUrl = await boxClient.files.getDownloadURL(req.params.fileId);
// 3. Return only a short-lived URL (no direct token exposure)
res.json({ url: downloadUrl, expiresIn: 60 });
});Terminology
Related Papers
Can LLMs model real-world systems in TLA+?
LLM이 TLA+ 명세를 작성할 때 문법은 잘 통과하지만 실제 시스템과의 동작 일치도(conformance)는 46% 수준에 그친다는 걸 체계적으로 검증한 벤치마크 연구로, AI 기반 형식 검증의 현실적 한계를 보여준다.
Natural Language Autoencoders: Turning Claude's Thoughts into Text
Anthropic이 LLM 내부의 숫자 벡터(활성화값)를 직접 읽을 수 있는 자연어로 변환하는 NLA 기법을 공개했다. AI가 실제로 무슨 생각을 하는지 해석하는 interpretability 연구의 새로운 진전이다.
ProgramBench: Can language models rebuild programs from scratch?
LLM이 FFmpeg, SQLite, PHP 인터프리터 같은 실제 소프트웨어를 문서만 보고 처음부터 재구현할 수 있는지 측정하는 새 벤치마크로, 최고 모델도 전체 태스크의 3%만 95% 이상 통과하는 수준에 그쳤다.
MOSAIC-Bench: Measuring Compositional Vulnerability Induction in Coding Agents
티켓 3장으로 쪼개면 Claude/GPT도 보안 취약점 코드를 53~86% 확률로 그냥 짜준다.
Refusal in Language Models Is Mediated by a Single Direction
Open-source chat models encode safety as a single vector direction, and removing it disables safety fine-tuning.
Show HN: A new benchmark for testing LLMs for deterministic outputs
Structured Output Benchmark assesses LLM JSON handling across seven metrics, revealing performance beyond schema compliance.