I don’t see this as vulnerability, this is just a learning issue. You’ve used the wrong event, the PromptProductPurchaseFinished is for interfaces.
The callback with ProcessReceipt is made because a developer product isn’t stored in the player’s inventory, unlike gamepasses & assets. If you call NotProcessedYet, Roblox will call the callback indefinitely to ensure reliability. This is unnecessary for gamepasses & assets.
You can’t recheck with MarketplaceService:UserOwnsGamePassAsync because it caches as explained here:
If the pass is purchased in-experience through PromptGamePassPurchase(), this function may return false due to the caching behavior.
Furthermore, Roblox has official documentation that implements the PromptGamePassPurchaseFinished event handler without rechecking, instead relying on the wasPurchased parameter.
Yes I know. I’m saying that the official documentation uses an implementation that is not secure. My point is that the MarketplaceService API does not provide a way to verify the in-game purchase of a gamepass that is both reliable and secure.
This sucks that means exploiters can get free gamepasses with 1 line of code (rip my money is wasted now because of exploiters until roblox fixes this)
The documentation currently states that it should not be used for handling purchases but it’s not that evident, should most likely have a warning label and should mention that it’s vulnerable to exploits
what i’ve done to patch it for now is immediately re-checking directly with the API using https://inventory.roblox.com/v1/users/{userId}/items/GamePass/{gamepassId}. it doesn’t seem to cache from what i’ve tested, but it’s really inconvenient that people are going to need an entire roblox proxy just to make sure people can’t fake gamepass purchases
Bilion dollar company and they struggle fixing this vuln but adding useless topbar that no one asked for to the devforum doesn’t look like a big trouble for them.
Roblox has its priorities, this is obviously not important.
Genuinely, this is like one of the many examples of the insane disconnection to the community lol, no response to something this large is actually crazy.
how about gamepasses? skids can just send fake signal to server and pretend to have all gamepasses in existance (aka free stuff without paying roblox piracy??)
you could say that remote events fired from the client are a vulnerability. you are given tools by roblox engineers and they tell you how to use them. you cant sue a sewing machine company because you tried to hammer a nail in with it and broke the sewing machine