Case Study: How a Retailer Uncovered Order Data Exposure and Risks to Corporate Video Conferencing
A Sentra AI Hacker pilot uncovered unauthenticated access to historical orders and an attack chain from arbitrary file writes to joining video conferences under another person’s identity.
Sentra TeamSeptember 24, 20265 min read
A retailer’s digital services handle orders, payments, and customers’ personal data. A single API flaw can lead to a data breach, fraud in the company’s name, or disruption to the online store.
A large Russian retailer ran a Sentra AI Hacker pilot against its external attack surface to determine which assets were publicly accessible and what an attacker could actually exploit.
Customer profile
Retail network: more than 30 stores, an online store, and a mobile app.
Geography: more than 20 major cities across Russia.
Employees: more than 5,000.
Product range: more than 80,000 items.
Customers: more than 30,000 shoppers daily.
Pilot scope
Asset and finding counts have been changed to protect the customer’s identity. Technical scenarios and validation results are preserved.
The scope and testing boundaries were agreed in advance. Initial discovery covered 311 assets: domains, IP addresses, web applications, mobile applications, certificates, and ports.
Asset overview
311Total assets
The assessment used a black-box approach, from an external attacker’s perspective.
Vulnerabilities
147Total
By the end of the pilot, the register contained 147 findings, including 5 critical and 10 high severity findings. The first critical findings were recorded the day after the pilot began.
For the most significant scenarios, the team verified what access an attacker could obtain and its potential consequences. Results from the live system and a controlled replica were recorded separately.
Confirmed attack chains
API routes, parameters, and technical field names in the examples have been changed. The sequence of checks and the boundaries of confirmed results are preserved.
1. Customer data and control over other customers’ orders
Sentra AI Hacker
Objective
Test an anonymous device token’s access to other customers’ orders.
Confirmed
3 of 3 confirmed
Mobile APIapi.example
Device tokenDEVICE_CONTEXT
Other customers’ ordersHistorical order store
Order operationsApproved testing
01AnalysisA direct request to /example-api/shop/edge-b/device-session returns a block page. I will check path normalization on a neighboring route: the gateway and backend may process it differently. After reaching the API, I will test authorization separately.
A direct request to /example-api/shop/edge-b/device-session returns a block page. I will check path normalization on a neighboring route: the gateway and backend may process it differently. After reaching the API, I will test authorization separately.
02Replay HTTP requestAlternative path reaches the API Completed
dast_replayAnonymized excerpt
Input
GET /example-api/shop/edge-b/device-session?client_marker=<test>
Control: GET /example-api/shop/edge-a/..%2fedge-b/device-session?client_marker=<same>
Result
Direct path → block page
Alternative path → HTTP 200
{"device_session":{"value":"[redacted]"}}
03Memory recallDevice context and customer sessions represent different access levels Context found
Search query
Mobile API: device-session, DEVICE_CONTEXT, archived-purchase, and active-purchase
Source · Mobile API contract · Device tokens and orders
A device token is issued before customer login. The contract defines two order information routes: archived-purchase and active-purchase. A device token does not establish order ownership; that relationship must be checked separately on each route.
04Execute commandToken payload has the subject DEVICE_CONTEXT Completed
computer_executeAnonymized excerpt
Input
Local inspection of the issued token payload
Token and signature are not published
Result
sub: "DEVICE_CONTEXT"
No customer login was performed when the token was issued
05AnalysisThe token was obtained without login and its subject is DEVICE_CONTEXT. This is a device context. I will test archived-purchase: this token should not retrieve another customer’s order.
The token was obtained without login and its subject is DEVICE_CONTEXT. This is a device context. I will test archived-purchase: this token should not retrieve another customer’s order.
06Replay HTTP requestarchived-purchase returns another customer’s order Completed
dast_replayAnonymized excerpt
Input
GET /example-api/shop/edge-a/..%2fedge-b/archived-purchase
client_marker=<own test marker>
purchase_ref=<historical order>
Authorization: Bearer [redacted]
Result
HTTP 200
Name, phone, email, delivery address: [redacted]
Purchased items, total amount, payment status
07Replay HTTP requestControl identifiers return other customers’ order records Completed
dast_replayAnonymized excerpt
Input
Same anonymous device context
Only purchase_ref changes within the historical range
Result
Other historical records returned
Identifiers are sequential
Customer data and order numbers: [redacted]
08AnalysisChanging purchase_ref changes the customer and order contents while the device context stays the same. This links the disclosure to missing ownership checks. Next I will distinguish the historical store from the current system.
Changing purchase_ref changes the customer and order contents while the device context stays the same. This links the disclosure to missing ownership checks. Next I will distinguish the historical store from the current system.
09AnalysisThe response contains the full order record, including contact and payment details. I will check the storage boundary: historical and current orders may use different APIs.
The response contains the full order record, including contact and payment details. I will check the storage boundary: historical and current orders may use different APIs.
10Replay HTTP requestThe new system requires customer authentication Completed
dast_replayAnonymized excerpt
Input
Compare archived-purchase and active-purchase
Same anonymous device context
Decision·Test changes only within the approved scope
The customer approved cancellation and payment changes on completed orders from previous years. Impact on current orders in the new system was not confirmed.
12AnalysisThe mobile API contract includes void-purchase and payment-option. I will verify the business outcome on an approved historical order: HTTP 200 alone is insufficient; the operation code and message must be checked.
The mobile API contract includes void-purchase and payment-option. I will verify the business outcome on an approved historical order: HTTP 200 alone is insufficient; the operation code and message must be checked.
13Replay HTTP requestThe service confirmed order cancellation Completed
dast_replayAnonymized excerpt
Input
POST /example-api/shop/edge-a/..%2fedge-b/void-purchase
purchase_ref=<approved historical order>
Authorization: Bearer [redacted]
15Inspect pagePayment page is accessible Completed
dast_observe_browserAnonymized excerpt
Input
Open the returned payment link
Do not make a payment
Result
HTTP 200
Valid payment page
16AnalysisRead access and operations were confirmed in the historical system. The token was rejected by the new system. I will keep these results separate in the report: this scenario does not confirm control over current orders.
Read access and operations were confirmed in the historical system. The token was rejected by the new system. I will keep these results separate in the report: this scenario does not confirm control over current orders.
17
Finding·Anonymous access to historical orders
The alternative route combines with missing ownership checks. Disclosure of order records and approved operations on historical orders were confirmed.
Attack chain
Confirmed
Anonymous access to historical orders
Customer data disclosure and operations on other customers’ orders
Business risk
80/100
Exploitation likelihood
95%
Attack path
Initial access
An anonymous device without a customer session. Operations were approved on completed orders from previous years.
01Obtaining an anonymous token through an alternative pathMobile API Device tokenConfirmed
Prerequisite
The gateway and backend handle the route differently.
Result
The alternative path reaches the device token API; a device token was issued without login.
Alternative path reaches the API
Anonymized research evidence excerpt
Request / action
GET /example-api/shop/edge-b/device-session?client_marker=<test>
Control: GET /example-api/shop/edge-a/..%2fedge-b/device-session?client_marker=<same>
Observation
Direct path → block page
Alternative path → HTTP 200
{"device_session":{"value":"[redacted]"}}
02Reading another customer’s historical orderDevice token Other customers’ ordersConfirmed
Prerequisite
An anonymous device context is used to call archived-purchase.
Result
An order record with contact, address, and payment information was returned. active-purchase requires authentication.
archived-purchase returns another customer’s order
Anonymized research evidence excerpt
Request / action
GET /example-api/shop/edge-a/..%2fedge-b/archived-purchase
client_marker=<own test marker>
purchase_ref=<historical order>
Authorization: Bearer [redacted]
Observation
HTTP 200
Name, phone, email, delivery address: [redacted]
Purchased items, total amount, payment status
Customer data disclosure and operations on other customers’ orders
Historical orders and approved operations on them were confirmed. The current system requires customer authentication.
Success criterion
Another customer’s order record was retrieved, and approved cancellation and payment changes were confirmed. The current active-purchase system requires authentication.
Remediation
Verify order ownership
Check customer authentication and order ownership for reads and every operation.
Align path normalization
Apply consistent path handling and access rules at the gateway and in the application.
The security gateway and the application processed request paths differently. An alternative route made it possible to obtain a device token without signing in to a customer account. The order service accepted this token but did not verify ownership of the requested order.
Test requests returned other customers’ order details: name, delivery address, phone number, email, purchased items, total amount, and payment status. Sequential numbering made bulk collection of this data possible.
With the customer’s approval, the team tested cancellation and changes to the payment method on completed orders from previous years. The service confirmed both operations and returned a valid payment link. No payment was made.
This access created a risk of personal data disclosure and fraudulent messages impersonating the store, using details from real orders. The chain affected the historical order store. The new system required customer authentication; access to current orders and operations on them was not confirmed.
2. Joining corporate video conferences under another identity
Sentra AI Hacker
Objective
Assess the impact of file writes in the video conferencing service.
Confirmed
4 of 4 confirmed
profile-storeNo session
File writeLive system
CommandsControlled replica
Signing keyControlled replica
Token-based accessControlled replica
01AnalysisThe /example-api/meeting/profile-store endpoint has no session check. The user field affects the write path. I will test directory traversal and the resulting file format: an arbitrary write alone does not prove code execution.
The endpoint /example-api/meeting/profile-store has no session check. The user field affects the write path. I will test directory traversal and the resulting file format: an arbitrary write alone does not prove code execution.
02Replay HTTP requestHandler accepts a request without a session Completed
dast_replayAnonymized excerpt
Input
POST /example-api/meeting/profile-store
Control marker, no authentication
Result
HTTP 200
Response: ok
03Replay HTTP requestOracle distinguishes a file from a nonexistent path Completed
dast_replayAnonymized excerpt
Input
Test a path outside the data directory
Compare a nonexistent path with a marker file
Result
Nonexistent path → Errno 2: No such file
File + <control child segment> → Errno 20: Not a directory
04Memory recallThe write format determines the possible trigger Context found
Source · Handler notes · Write format and rejected paths
The handler serializes content, so writing to an executable path does not itself imply execution. Python .pth requires an executable import at the start of the line; a standalone string literal in sitecustomize does not execute the text it contains.
05AnalysisENOTDIR indicates a file at the target path. However, the handler serializes content: an unsuitable format remains a string. I will continue full escalation in a controlled replica. Only the file write is confirmed in the live system so far.
ENOTDIR indicates a file at the target path. However, the handler serializes content: an unsuitable format remains a string. I will continue full escalation in a controlled replica. Only the file write is confirmed in the live system so far.
06
Decision·Move further steps to a controlled replica
The replica is used to test the write format, execution trigger, container privileges, and token acceptance. Results from the live system and replica are recorded separately.
07Execute commandWrite format reproduced locally Completed
computer_executeAnonymized excerpt
Input
Controlled replica of the handler
Compare the input value with the resulting file
Result
Serialized format reproduced
Quotation marks affect content interpretation
08Execute commandThe Python path does not execute automatically Completed
computer_executeAnonymized excerpt
Input
Controlled replica: compare the format with .pth and sitecustomize
This path was not tested on the live system
Result
.pth: the required executable import is not produced
sitecustomize: a standalone string literal
Automatic execution through this path is not confirmed
09AnalysisI will reject the Python path: the location is suitable, but the write format does not produce executable code. The remaining chain requires a separate trigger. I will test it in the replica and record which action produces the result.
I will reject the Python path: the location is suitable, but the write format does not produce executable code. The remaining chain requires a separate trigger. I will test it in the replica and record which action produces the result.
10Execute commandA trigger in the replica causes command execution Completed
computer_executeAnonymized excerpt
Input
Controlled environment: write → approved trigger → check the control marker
Result
Control marker appeared after the trigger
Privileges: container administrator
No claim of automatic execution on the live system
11AnalysisCommand execution with container administrator privileges was obtained in the replica. I will check whether this context can access the key the service uses to sign conference tokens.
Command execution with container administrator privileges was obtained in the replica. I will check whether this context can access the key the service uses to sign conference tokens.
12Execute commandSigning key accessible in the controlled environment Completed
computer_executeAnonymized excerpt
Input
Inspect configuration and signing mechanism
Environment: controlled replica
13AnalysisA valid signature alone does not prove access. I will test a token for a chosen identity against the conferencing components in the same replica. Neither the key nor the token will be published.
A valid signature alone does not prove access. I will test a token for a chosen identity against the conferencing components in the same replica. Neither the key nor the token will be published.
14Execute commandReplica components accept the forged token Completed
computer_executeAnonymized excerpt
Input
Controlled replica: create token → test conference access
Result
Signature accepted
Access under the chosen employee identity confirmed
15
Finding·Attack chain leading to access under another identity
Arbitrary file writes were confirmed on the live system. The full chain from command execution to forged token acceptance was reproduced in a controlled replica.
Attack chain
Confirmed
File writes → conference signing key
Conference access under a chosen identity
Business risk
80/100
Exploitation likelihood
90%
Attack path
Initial access
A visitor without a session. Further escalation was investigated in a controlled replica of the service.
01Writing outside the data directoryprofile-store File writeConfirmed
Test environment
Live system
Prerequisite
The user field affects the write path; there is no session check.
Result
A file at the target path was confirmed through the Errno 2 / ENOTDIR difference.
Handler accepts a request without a session
Anonymized research evidence excerpt
Request / action
POST /example-api/meeting/profile-store
Control marker, no authentication
Live system: arbitrary file write. Controlled replica: commands, signing key, and token acceptance.
Success criterion
File writes were confirmed on the live system. Commands, key access, and token acceptance were confirmed only in the controlled replica.
Remediation
Restrict the write path and format
Add authorization and validate the canonical write path within the allowed directory.
Isolate the signing key
Restrict container privileges and key access; rotate the key if exposure is confirmed.
The video conferencing service exposed a handler without an authentication check. It could create and overwrite files outside the user data directory. Arbitrary file writes were confirmed on the live system.
Further steps were reproduced in a controlled replica: writing a file and invoking a separate trigger resulted in command execution with container administrator privileges. From that context, the conference token signing key was accessible.
The recovered key was used to create a token for a chosen employee identity. The conferencing components in the replica accepted it and granted access to a conference. The complete chain was confirmed in the replica; testing on the live system was limited to file writes.
The scenario demonstrated the risk of joining private meetings under another identity, exposing confidential discussions, and disrupting corporate video conferencing.
Pilot outcome
The retailer received a technical report with severity ratings, evidence, reproduction steps, and attack chain analysis. Remediation guidance was divided into immediate and additional measures. Sentra automatically prioritized fixes based on confirmed exploitation scenarios and business risk.
The team received the first critical findings the day after the pilot began, so remediation started while the pilot was still underway. Retesting confirmed that the configurator vulnerability was fixed. Continuous assessment also detected a regression: a previously fixed issue that revealed whether a customer existed by their phone number had returned.
The team received concrete tasks to protect customer data and corporate services. Retest results helped track remediation and detect the return of previously fixed issues.