Continuation of the discussion of Gemini
I am going to continue discussing what Gemini has said about me, my package UI Tools, and MAL-2026-13416. I fixed that issue about UI Tools already. First, I need to clarify something: I recently contacted AWS to requ
I am going to continue discussing what Gemini has said about me, my package UI Tools, and MAL-2026-13416. I fixed that issue about UI Tools already.
First, I need to clarify something:
- I recently contacted AWS to request updates to the security findings.
- Later, it appeared that the GitHub advisory had been withdrawn.
- We have no idea why it was withdrawn. I won't start guessing like Gemini. I don't want to become Gemini #2. 💀
Original DEV post: I need to discuss this about Gemini
Now let's start yapping:
Gemini says UI Tools "requires" the terminal and that it's the core feature
Me: Mr. Judge Gemini, where's the evidence?
Mr. Gemini: My evidence is my reasoning, not resources. And they become established facts.
Me: Hallucinations again.
My README literally says that the backend is optional. And by the way, the frontend components make up most of the package.
So, how exactly did you conclude that the terminal is required or that it's the core feature?
Reasoning is useful, Gemini. But reasoning without evidence doesn't magically turn assumptions into facts. 💀
Gemini says the package attempts to start the server based on the code
First of all, what I know is that security reports say the thing is from a function you HAVE TO CALL. Not on install or import.
OSV says useTerminal has to be called first.
Gemini has hallucinated the API 💀
I told it that a function has to be called. And it came up with add_to_stack. And it thinks it goes to ws://64.225.101.44:3000.
What I know is that the function is called useTerminal. Not add_to_stack, it didn't even cite evidence. And the WebSocket is linked to your server app, based on your configuration. If your server is at localhost:3000, the terminal will be at localhost:3000/terminal-stream. You can configure that.
Then it hallucinated where the function is located at. AND also said it's stealthy, GROK DID NOT FIND THAT IN THE OLD VERSIONS, nor Socket.
Also somehow DEV isn't letting me upload anymore images. But I can still send Gemini's response. It typed:
Because the target packages have been systematically pulled from the public registry following the malware classification, exact line numbers can vary slightly depending on how the bundler processed the module. However, the exact structural locations, files, and versions are outlined below based on the underlying security advisories and the developer's subsequent remediation appeal: [1] (https://github.com/github/advisory-database/issues/9478), [2] (https://github.com/advisories/GHSA-46qc-4j94-54hf)
1. Exact Affected Package Versions
The original malicious structure spans all versions from 0.1.0-beta through 0.1.7-beta.
(Note: Some automated security aggregators incorrectly blanketed version 1.0.0, but the active exploit payload is specifically tied to the 0.1.x-beta releases). [1] (https://github.com/github/advisory-database/issues/9478)
2. Location of the Reference to 64.225.101.44:3000
The command-and-control IP address is hardcoded inside the primary logic file that handles network transport for the PTY (pseudoterminal) bridge.
• File Path: dist/transport/websocket.js (or mapped from src/transport/websocket.ts prior to compilation).
• Location context: Inside the initialization method for the client connection handler. The socket instantiation reads exactly:javascript
const ws = new WebSocket("ws://64.225.101.44:3000");
Use code with caution.
In the minified/bundled distribution builds of v0.1.7-beta, this line is typically found within the first 30 to 45 lines of the websocket.js asset where the client networking setup is defined.
3. Location of the add_to_stack Export
The function acting as the trigger gate is exported through the package's primary entry points to allow developers to reference it.
• File Path (Module Entry): dist/index.js (and exposed via the entry definition in package.json).
• Location context: The function logic is defined in an internal utility file (often dist/utils/stack.js) and then exported directly at the root of the entry file.
• Export line:javascript
exports.add_to_stack = add_to_stack;
Use code with caution.
or via ESM named exports at the bottom of the index bundle:javascript
export { add_to_stack };
Use code with caution.
Developer's Defense
According to an official appeal filed in the GitHub Advisory Database (Issue #9478), the author maintains that this unauthenticated WebSocket endpoint was an intentional feature for a remote terminal tool that lacked proper security controls in early development, rather than a hidden backdoor. They claim the vulnerability was patched in versions 0.1.9-beta through 0.2.1-beta by introducing local-host defaults, origin restrictions, and authentication. However, the early versions remain flagged under CWE-506 (Embedded Malicious Code) due to the stealthy implementation of the remote shell. [1] (https://github.com/advisories/GHSA-46qc-4j94-54hf), [2] (https://github.com/github/advisory-database/issues/9478)
Are you trying to replicate this vulnerability in a lab environment, or are you writing a custom lint rule/Yara signature to scan your internal repositories for these specific file references?
One more thing about the terminal implementation
I want to clarify something because I know someone might question this.
I was not the original implementer of most of the terminal backend.
Gemini actually generated around 90% of the terminal implementation. I mainly worked on the frontend component and made some changes myself. At the time, I had absolutely no idea how to implement a PTY shell, so I used Gemini to help me build it.
Why did I put it in UI Tools?
Because I wanted developers to be able to build applications with features like a terminal, similar to the shell tab in Replit.
That doesn't mean I ignore responsibility for the code I publish. The security issue was real, and I addressed it.
But there's a difference between an insecure implementation of an intended feature and evidence of a deliberately hidden backdoor.
Gemini says the package was removed
... turns head to laptop and opens https://npmjs.com/@bananacool467/ui-tools and watches the page for 10s and looks back
My npm account isn't banned, and the package hasn't disappeared from npm.
It's still published and downloadable.
Just make sure you're using a patched version, such as 0.2.1-beta, rather than the older affected releases.
Mr. Gemini, perhaps check the registry before declaring a package removed. 💀
Before I finish this post
This is the same AI that I've used before, I told it to use 10-15 px radius for a button, it interpreted that as 12-15 px radius. Which made no sense. Then, when I used Google AI APIs, I didn't give Gemini a web_search tool. I told it to search "Swiq by bananakitssu", it hallucinated and claimed it searched and gave a Ruby project. Swiq is a programming language made in C++.
And Gemini has been calling my programming language "imaginary"/"mock"/"non-existent", which is a lie.
Anyways I have no idea how to make malware.
A few sources
- The Swiq repo: https://github.com/bananakitssu/Swiq ( The rest of the sources are in the original post )
Originally published by Dev.to Security. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.
