T09 · Insecure Skill Coding Practices
- Location
references/deployment.md:15- Finding
Default and Plaintext Credentials in Deployment Examples
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a documentation-only Teamgram architecture skill, but its deployment guide includes copyable production examples with weak credentials and exposed internal services.
Install only if you will treat the deployment snippets as architecture notes, not production-ready manifests. Before using them, replace all example credentials, use Kubernetes Secrets or an external secrets manager, remove public mappings for internal services, pin container images by version or digest, use least-privileged database accounts, and configure backups to a bucket you own with encryption and access controls.
references/deployment.md:15Default and Plaintext Credentials in Deployment Examples
references/deployment.md:37Internal Infrastructure Services Exposed Without Authentication or Transport Encryption
references/deployment.md:49Mutable Container Image Tags Permit Unreviewed Dependency Replacement
references/deployment.md:418MySQL Root Password Expanded into Backup Process Arguments
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
mysql:
image: mysql:8.0
environment:
# ⚠️ 生产环境:使用强密码,通过 .env 文件或 secrets 注入
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-changeme}
MYSQL_DATABASE: teamgram
volumes:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
mysql:
image: mysql:8.0
environment:
# ⚠️ 生产环境:使用强密码,通过 .env 文件或 secrets 注入
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-changeme}
MYSQL_DATABASE: teamgram
volumes:
The manifest description says 'Use when designing service topology, implementing MTProto services, or self-hosting Teamgram,' which describes broad situations rather than specific invocation triggers. It does not define narrower trigger phrases, scope limits, or negative examples, so the skill could match loosely related architecture or backend discussions unintentionally.
The safety notice and several explanatory phrases are presented in Chinese, but the file does not state that the skill is Chinese-language only or give users a language choice. This can violate language/locale policy when users are not explicitly opting into that language.
The Docker Compose example exposes internal infrastructure services and includes insecure defaults despite later hardening advice, creating a realistic risk that operators will deploy the sample as-is. Exposed etcd, Kafka, MinIO, and related services can leak data, enable unauthorized access, or allow hostile reconfiguration of core backend components.
The example includes default MinIO credentials and publicly exposed service ports without an immediate, prominent warning that using the manifest unchanged in production is unsafe. This can lead to trivial unauthorized access to object storage and administrative consoles, especially in self-hosted environments where examples are often copied directly.
The Kubernetes ConfigMap stores a database credential in plaintext configuration, which is broadly readable within many cluster workflows and often ends up in logs, Git, or deployment tooling. Even if this is illustrative, placing secrets in ConfigMaps normalizes an unsafe pattern for operators deploying MTProto backend infrastructure.
Data is uploaded to cloud storage (S3 / GCS / Azure Blob). This may be a legitimate backup or exfiltration to an external bucket. Manual review is recommended.
mysqldump -h mysql -u root -p teamgram > backup-$(date +%Y%m%d).sql
aws s3 cp backup-*.sql s3://teamgram-backups/mysql/
### Kubernetes CronJob
Data is uploaded to cloud storage (S3 / GCS / Azure Blob). This may be a legitimate backup or exfiltration to an external bucket. Manual review is recommended.
mysqldump -h mysql -u root -p teamgram > backup-$(date +%Y%m%d).sql
aws s3 cp backup-*.sql s3://teamgram-backups/mysql/
### Kubernetes CronJob
The documentation embeds a concrete MySQL credential string (user:password@...) in a configuration example without any warning that secrets must not be hardcoded or committed. In an architecture/development guide, this pattern can normalize insecure secret handling and lead users to copy the example into real deployments, exposing credentials in source control, configs, logs, or build artifacts.
Several critical safety comments are written only in Chinese while the surrounding deployment guide is in English. This can prevent some users from understanding important security guidance, creating a language-policy issue because the file effectively forces a specific language for essential instructions without offering a choice.
The guide is primarily written in English, but embedded code comments switch to Chinese (加载配置,失败则退出, 创建服务上下文, 创建gRPC服务器) with no indication that the skill or documentation is intentionally locale-specific. This can violate language policy when a specific language is imposed without user opt-in or justification.
No suspicious patterns detected.