cli@6.3.0
CAUTION· startup onlyPublisher claims: "Microi吾码 AI 开发 CLI 与多宿主 Plugin:服务器连接、Skills、MCP、V8 同步和低代码交付" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- microi.net (its own)
- What the honeypot saw
- no credential files read · no network
- What we could not test
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Connect it under the guard. Startup only; authenticated tool behavior not tested. The code names no credential variable and talks to microi.net, its own; the guard pins the network to what the honeypot saw and logs every call.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; startup only; authenticated tool behavior not tested) on 2026-11-11 and scored it 68/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Credential pass-through configuration. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 20 s · 2 scenarios · 0 deviationsStatic findings
- 登录使用统一 `V8.Login` 与 DiyToken,不创建第二套用户体系。Token 失效后回到认证门;禁止在 URL、日志、源码、`.env` 或业务数据中保存 Token。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- 目录扫描必须排除 `node_modules`、`dist`、`build`、`coverage`、缓存、版本库和 UniApp 构建目录;发现 `.env`、证书、私钥、符号链接或越过根目录时失败关闭。Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…nse、登录/API Key、付费订阅、供应商配额或并发保护。 - 管理中转权益复用 Managed `platform-ai-account`:先 `GetRelayTokenAccount({TargetUserId})`,再 `SetRelayTokenLimit({TargetUserId,IsUnlimited,Expecte…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// Do not pass secrets, arbitrary URLs or a caller-selected storage endpoint.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.….values(e).find(f=>typeof f.command=="string"),g=String(l?.command||""),u={...l?.env||{}},d=Object.fromEntries(Object.entries(u).filter(([f])=>!f.startsWith("MICROI…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- 自动化检查:提供只执行权限门禁的无副作用入口;在本地 Linux 容器分别覆盖 root 且无 sudo、普通帐号且无 sudo、普通帐号通过 sudo 提权三种场景,断言成功路径最终 `uid=0`、失败路径发生在步骤 1 之前且不创建 `/microi`。源码契约同时锁定正常安装与 `--repair-app` 均调用同一门禁,并执行 `bash -n`。Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.const BLOCKED = /^(?:\.git|\.env|private|private-source|privatesource|source|_origin)$/i;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…instanceof Error?c.message:String(c)}`},t)}return}if(process.env.MICROI_DISABLE_AUTO_UPDATE!=="1")try{Lr({currentVersion:Ge(),workspace:ge(e,"workspace")||process.cwd(),sourceCliPath:process.argv[1]})}catch{}if(n==="plugin"&&r==="path"){le…Fix: Pin versions and sources; vendor anything fetched at install time.…V8\u4E8B\u4EF6",Rt="\u5B57\u6BB5V8\u4E8B\u4EF6",gn="\u8282\u70B9",Xr={InFormV8:"\u524D\u7AEF\u8868\u5355\u8FDB\u5165V8\u4E8B\u4EF6",SubmitFormV8:"\u524D\u7AEF\u8868\u5355\u63D0\u4EA4\u524DV8\u4E8B…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…(W.join(s,".vscode","mcp.json"),"servers",p),kt(W.join(s,".cursor","mcp.json"),"mcpServers",p);let m=Object.fromEntries(Object.entries(p).map(([h,S])=>[h,Yo(S,l,u)]));kt(W.join(s,".trae","mcp.json"),"mcpServers",m,!0);let f=Object.fromEntr…Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.…/.tmp/microi-e2e/<项目相对路径>/`,**不再**写入 `tests/e2e/`、根目录 `playwright.config.js` 或 `.env.e2e.example`。 > - `playwright.config.js` 位于 `.microi-e2e/playwright.config.js`,…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…||!q.existsSync(n))return;let r=[];try{r=q.readdirSync(n).filter(i=>i.endsWith(".json")).slice(0,200)}catch{return}for(let i of r){let o=Gt.join(n,i);try{let a=JSON.parse(q.readFileSync(o,"utf-8")),c=this.normalizeApiBaseUrl(String(a.apiBa…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…`Microi.Client/src/views/form-engine/diy-field-component/` 和 `diy-component-list.json` 为事实源。当前常用组件包括:`Text`、`Guid`、`Textarea`、`NumberText`、`DateTime`、`Select`、`MultipleSelect`、`Radio`、`Checkbox`、`Switch`、`Rate`、`Progress`、`Slider`、`ColorPi…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.| 后端 V8 的 `console.log` / `console.error` | 租户系统日志(MongoDB);MCP/调试执行同时返回当次 `ConsoleOutput` | 临时诊断、性能日志 |Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ce().getSyncRootDir();ft(t),Ke(t,[".backups/","**/.backups/",".microi-mcp-tokens.json","**/.microi-mcp-tokens.json"])}catch{}}shortBackupKey(e){return require("crypto").createHash("sha1").update(e||"").digest("hex").slice(0,10)}getMenuButt…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…equire("path")),ee=$(require("fs")),gs=$(require("crypto"));var lt=".microi-meta.json",un=".microi-config.json",It=".microi-mcp-tokens.json";var qr=".mcp.json";var Ne="Microi-V8-Engine";var ut="\u63A5\u53E3\u5F15\u64CE",Yr="V8\u4E8B\u4EF6"…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…d(C),C&&(m.headers.Authorization=`Bearer ${C}`);let h=`${n}${l}`;if(e.silent||ye.log("API",`\u27A1\uFE0F ${e.method} ${h}`),e.body&&!e.silent){let S=JSON.stringify(this.maskSensitiveBody(e.body));ye.appendLine(` Body: ${S.length>500?S.subs…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…"),le=$(require("fs")),kn=$(require("path")),jt=".microi-workspace-secrets.dpapi.json";async function Kt(s,e,t=()=>{}){if(t(),s.storeMany){await s.storeMany(e);return}for(let[n,r]of Object.entries(e))t(),await s.store(n,r)}var Is=["$ErrorA…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.- 若要求 `kill -9` 前也零丢失,业务成功响应前必须获得共享 outbox/MQ/WAL 持久化确认。Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for @microi.net/cli@6.3.0 as of 3d ago. This is the package itself, not its dependencies.
What would make this Verified
12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim microi.net: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Credential pass-through configuration≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Auto-update or dynamic fetch configuration≈ +4 on the totalPin versions and sources; vendor anything fetched at install time.
- Unicode escape sequence detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.