Preparing today's journal

Please wait a moment.

Back to stories

The Wallet's Side Door Was Open

A plain-language August 17, 2026 briefing on why wallet-key security and customer-order API authorization are separate problems

Read like a book
Normal
A 3D miniature of order boxes and personal-data cards slipping through a small API door beside a locked hardware wallet

Topic

Daily Issues

The Wallet's Side Door Was Open

A plain-language August 17, 2026 briefing on why wallet-key security and customer-order API authorization are separate problems

Summary

Summary

  1. The SafePal incident concerned order lookup authorization, not reported theft of wallet keys.
  2. APIs for user-owned orders and documents must verify object ownership on every request.
  3. Prices, investment flows, and housing data also need timestamps and measurement labels before interpretation.
12Page
A 3D miniature of order boxes and personal-data cards slipping through a small API door beside a locked hardware wallet

Summary

At a glance

  • The SafePal incident concerned order lookup authorization, not reported theft of wallet keys.
  • APIs for user-owned orders and documents must verify object ownership on every request.
  • Prices, investment flows, and housing data also need timestamps and measurement labels before interpretation.

This is my personal record based on public material, not a recommendation to buy or sell any asset.

Information cutoff: August 17, 2026 at 8:42 a.m., Korea time

Today I spent more time looking beside the wallet than inside it. SafePal disclosed that order information for roughly 39,798 customers had been viewed without authorization. The reported cause was not broken cryptography or an opened hardware vault. It was an authorization problem in a web order-lookup function that failed to confirm whether the requester owned the order.

In plain terms, the front-door lock held, but one key opened several parcel lockers. It matters that the vault remained closed. Once names, addresses, phone numbers, and purchase history leak, however, the reassurance label needs a slightly smaller font.

1. I separated what was exposed from what was not

The incident description says the affected data included names, email addresses, shipping addresses, phone numbers, and purchase details. Seed phrases, private keys, wallet passwords, card and bank information, and government IDs were reportedly not included. There was also no evidence that wallets or funds were directly compromised.

That distinction is essential. Calling it only a “crypto-wallet breach” can make readers think coins were stolen. The more immediate follow-on risk is different: an attacker may know who owns a hardware wallet and which model they bought. Fake firmware deliveries, support impersonation, and targeted phishing can then sound much more convincing.

I used security reporting that cites SafePal’s disclosure for the affected period, count, move to a 90-day retention period, and takedown of phishing links. SafePal’s announcement index did not surface the detailed notice in search at verification time, so I did not extend the claims beyond those reported facts.

Sources: SafePal incident report, SafePal security information

2. Login checks and order-ownership checks are different

The published description resembles a classic BOLA or IDOR problem. It happens when a service verifies that someone is logged in but fails to verify that the requested order belongs to that person.

GET /orders/1234

If changing 1234 to 1235 reveals another customer’s order, switching to UUIDs is not the fix. Making the number harder to guess is like printing a smaller house number. It does not check the key.

The server should verify this relationship on every request:

authenticated user → allowed role → object owner → allowed action

Even administrators do not always need every order. Support staff should see assigned tickets, and shipping partners should receive only the fields needed for delivery. Permission is easy to pour and difficult to scoop back. Soup works the same way with salt, although soup causes fewer incident calls.

Source: OWASP Broken Object Level Authorization

3. I put authorization regression tests beside feature tests

For an order API, I would test more than the happy path. I would create two accounts and automate these cases:

  1. User A reads order A — allow.
  2. User A requests order B — deny.
  3. An unauthenticated user requests an order — deny.
  4. A shipping role requests full payment and contact data — deny.
  5. A revoked token tries again — deny.

The test must inspect returned fields as well as status codes. Hiding a phone number in the page does not help if the API response still contains it. Browser developer tools are sometimes too helpful about the truth.

Logs should record who accessed which order without copying the personal data itself. Sequential order-number scans, unusual volumes, and abrupt country changes deserve alerts.

4. Collecting less shortens the chase after an incident

SafePal said it reduced the relevant retention period to 90 days. Shorter retention is not glamorous, but its effect is clear: attackers cannot steal an old address that is no longer on the server.

My threat model for a security product would include more than product code:

  • storefront and order-tracking plugins;
  • customer-support and CRM connections;
  • fields sent to shipping partners;
  • backups and analytics logs;
  • evidence that deletion jobs actually ran.

“We do not hold your keys” and “this is how we hold order data” belong in the same security story. A decentralized wallet still travels through a centralized warehouse.

5. I checked the labels on today’s other numbers

The remaining news carried the same lesson. Bitcoin below $63,000 is a quote at a specific time. Germany’s €4.3 billion of direct investment into the United States is a flow whose composition matters, not proof that every existing business is leaving. A 2% decline in UK housing refers to initial asking prices for new listings, not completed sale prices.

Before using any number, I attach three labels:

  • when it was measured;
  • what it measured;
  • what it excluded.

A sticker price, a receipt, and a bank balance are all numbers, but they answer different questions. That is why developers need schemas. I separated the market process into Investment & Economy: I Did Not Trust the Sticker Price.

My developer checklist

  • Enforce server-side ownership checks on every object API.
  • Never treat a UUID as authorization.
  • Automate cross-account authorization regression tests.
  • Include response fields, logs, and backups in the privacy boundary.
  • Verify retention limits and deletion jobs in operation.
  • Label market data with its source, timestamp, and measurement target.

My conclusion today is simple: if I buy the most expensive vault, I should also press the order-lookup button beside it. Attackers often look past the boldest line in a product brochure and head for the thinnest authorization check.

Continue reading

Previous story · Next story

Previous storyI Read the Guarantee FirstNext story I Did Not Trust the Sticker Price