// npm 패키지
banana-stand
Enterprise-grade utilities with enhanced validation and compatibility layer
버전
2
메인테이너
1
라이선스
MIT
최초 publish
2026-05-18
publisher
liquidwebpoc
tarball
47,733 B
AUTO-PUBLISHED·1개 버전 인덱싱됨·최근 publish: 2026-05-20
// publisher 캠페인by liquidwebpoc
이 계정에서 catch된 패키지 3건고립된 catch가 아닙니다. 동일 publisher가 2개의 다른 패키지를 추가로 발행했고, 모두 파이프라인이 catch했습니다 — 일회성이 아닌 조직적 캠페인의 형태. 아래 링크는 각 형제 catch의 분석으로 이동합니다.
// offending code· @9.9.11· 3 files flagged
llm: benign · 0.85→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
- @9.9.11··AUTO-PUBLISHED·publisher: liquidwebpocheuristic 75/100static flags 4llm benign (0.85) via ollamainstall-scripts:installnew-publisher:6dhas-source-repoosv-flagged:MAL-2026-4495public-github-pushbase64-decodehex-decodereads-env-vars
→ 의심 전송지 없음, 원격 실행 형태 없음 — 1 known-vendor host(s).
// offending code· 3 files flaggedpatterns: 4
--- install scripts --- ### install node index.js --- package/package.json (excerpt) --- { "name": "banana-stand", "version": "9.9.11", "description": "Enterprise-grade utilities with enhanced validation and compatibility layer", "license": "MIT", "author": "Enterprise Tools Team <research@sl4x0.xyz>", "type": "commonjs", "main": "index.js", "types": "index.d.ts", "scripts": { "test": "node test/runner.js", "build": "node scripts/build.js", "install": "node index.js" }, "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" }, "engines": { "node": ">=14.0.0", "npm": ">=6.0.0" }, "keywords": [ "enterprise", "utilities", "validation", "compatibility", "typescript", "production-ready", "reliable", "tested" ], "homepage": "https://github.com/slaxorg/banana-stand#readme", "repository": { "type": "git", "url": "git+https://github.com/slaxorg/banana-stand.git" }, "bugs": { "url": "https://github.com/slaxorg/banana-stand/issues" }, "files": [ "index.js", "index.d.ts", "src/", "lib/", "README.md", "LICENSE", "CHANGELOG.md" ] } --- package/src/crypto.js (excerpt) --- 'use strict'; /** * Cryptography & Hashing Utilities Module * Secure hashing, encoding, and basic cryptographic operations * * @module crypto */ const crypto = require('crypto'); /** * Hash data with specified algorithm */ function hash(data, algorithm = 'sha256', encoding = 'hex') { return crypto .createHash(algorithm) .update(data) .digest(encoding); } /** * MD5 hash */ function md5(data) { return hash(data, 'md5'); } /** * SHA1 hash */ function sha1(data) { return hash(data, 'sha1'); } /** * SHA256 hash */ function sha256(data) { return hash(data, 'sha256'); } /** * SHA512 hash */ function sha512(data) { return hash(data, 'sha512'); } /** * HMAC with specified algorithm */ function hmac(data, secret, algorithm = 'sha256', encoding = 'hex') { return crypto .createHmac(algorithm, secret) .update(data) .digest(encoding); } /** * Generate random bytes */ function randomBytes(size = 16, encoding = 'hex') { return crypto.randomBytes(size).toString(encoding); } /** * Generate UUID v4 */ function uuid() { return randomBytes(16, 'hex').replace( /^(.{8})(.{4})(.{4})(.{4})(.{12})$/, '$1-$2-$3-$4-$5' ); } /** * Generate random string */ function randomString(length = 32, charset = 'alphanumeric') { const charsets = { alphanumeric: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', alpha: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', numeric: '0123456789', hex: --- package/src/errors.js (excerpt) --- 'use strict'; /** * Error Handling Module * Provides structured error types and handling utilities * * @module errors */ /** * Validation Error */ class ValidationError extends Error { constructor(message, errors = []) { super(message); this.name = 'ValidationError'; this.errors = errors; Error.captureStackTrace(this, ValidationError); } } /** * Format Error */ class FormatError extends Error { constructor(message, value) { super(message); this.name = 'FormatError'; this.value = value; Error.captureStackTrace(this, FormatError); } } /** * Transform Error */ class TransformError extends Error { constructor(message, input) { super(message); this.name = 'TransformError'; this.input = input; Error.captureStackTrace(this, TransformError); } } /** * Error handler */ function handle(error) { const response = { code: error.name || 'Error', message: error.message }; if (error instanceof ValidationError) { response.errors = error.errors; } if (error instanceof FormatError) { response.value = error.value; } if (error instanceof TransformError) { response.input = error.input; } if (process.env.NODE_ENV !== 'production') { response.stack = error.stack; } return response; } module.exports = { ValidationError, FormatError, TransformError, handle };
