| local ReplicatedStorage = game:GetService("ReplicatedStorage") | |
| local ServerStorage = game:GetService("ServerStorage") | |
| local CollectionService = game:GetService("CollectionService") | |
| local ClassService = require(ServerStorage.Services.Gameplay.ClassService) | |
| local Constants = require(ReplicatedStorage.Gameplay.Constants) | |
| local NPCSenses = {} | |
| function NPCSenses.GetEnvironmentFeatureVector(npc, abilityDebounces) |
A warning to Roblox developers about a powerful exploit primitive. In this, I will detail the research I’ve conducted into this attack vector and walk you through how you as a developer, can protect against exploits with primitives like this.
DataStoreService lets you store data that needs to persist between sessions, such as items in a player’s inventory or skill points. Data stores are consistent per experience, so any place in an experience can access and change the same data, including places on different servers.
By default, experiences tested in Studio cannot access data stores, so you must first enable API services. You will need to do this to test the vulnerabilities.
The idea I wanted to explore when pondering the above question was; can we exploit remotes to prevent data from saving? It is easy to blame the developer for not protecting themselves against such a simple exploit but it ends up being more complicated than that. I found plenty of examples of these vulnerabilities occurring
| -------------------------------------------------------------------------------- | |
| -- Batched Yield-Safe Signal Implementation -- | |
| -- This is a Signal class which has effectively identical behavior to a -- | |
| -- normal RBXScriptSignal, with the only difference being a couple extra -- | |
| -- stack frames at the bottom of the stack trace when an error is thrown. -- | |
| -- This implementation caches runner coroutines, so the ability to yield in -- | |
| -- the signal handlers comes at minimal extra cost over a naive signal -- | |
| -- implementation that either always or never spawns a thread. -- | |
| -- -- | |
| -- API: -- |
| --[[ | |
| MIT License | |
| Copyright (c) 2021 EgoMoose | |
| Permission is hereby granted, free of charge, to any person obtaining a copy | |
| of this software and associated documentation files (the "Software"), to deal | |
| in the Software without restriction, including without limitation the rights | |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
| copies of the Software, and to permit persons to whom the Software is |
