Insufficient Technical Documentation
Description
Insufficient Technical Documentation occurs when a product does not contain sufficient technical or engineering documentation that describes all the relevant software/hardware elements of the system. This includes missing or inadequate architectural documentation, design specifications, API documentation, security controls documentation, hardware specifications, and operational procedures. Without comprehensive documentation, understanding how the system works, its security boundaries, and its intended behavior becomes extremely difficult.
Risk
Insufficient documentation has significant indirect security implications. Security auditors and penetration testers waste time understanding architecture instead of finding vulnerabilities. Threat modeling is hampered without understanding data flows and trust boundaries. Developers may introduce vulnerabilities due to misunderstanding system design. Incident response is slowed when responders don't understand system architecture. Compliance requirements for documentation (SOC2, PCI-DSS, HIPAA) may not be met. Third-party integrations may be implemented insecurely due to unclear interfaces. Post-manufacture verification of hardware becomes impossible without proper specifications.
Solution
Create and maintain comprehensive technical documentation including: (1) Architecture and design documentation, (2) API specifications and interface contracts, (3) Security architecture and controls documentation, (4) Data flow diagrams and trust boundary definitions, (5) Threat models, (6) Hardware specifications and tolerance documentation, (7) Deployment and configuration guides, (8) Operational procedures and runbooks. Treat documentation as code - version control it, review changes, keep it current. Generate documentation from code where possible. Include documentation requirements in definition of done.
Common Consequences
| Impact | Details |
|---|---|
| Other | Scope: Other Reduce Maintainability - Insufficient documentation makes the product harder to understand, maintain, and secure. |
| Other | Scope: Other Quality Degradation - Without proper documentation, verification that the product functions as intended becomes impossible. |
| Other | Scope: Other Reduce Reliability - Lack of documentation can lead to improper use, misconfiguration, and reliability issues. |
Example Code
Vulnerable Code
// The "code" for this CWE is the ABSENCE of documentation
// This section describes what insufficient documentation looks like
/* ============================================================
EXAMPLE OF INSUFFICIENT DOCUMENTATION
============================================================
Project: Payment Processing System
README.md contents:
-------------------
"Run npm install then npm start"
That's it. No other documentation exists.
MISSING DOCUMENTATION:
----------------------
1. ARCHITECTURE DOCUMENTATION (Missing)
- No system architecture diagram
- No description of components
- No explanation of data flows
- No trust boundary definitions
2. API DOCUMENTATION (Missing)
- No endpoint descriptions
- No authentication requirements
- No request/response formats
- No error handling documentation
3. SECURITY DOCUMENTATION (Missing)
- No threat model
- No security controls description
- No authentication/authorization model
- No data classification scheme
- No encryption specifications
4. CONFIGURATION DOCUMENTATION (Missing)
- No environment variables description
- No configuration options
- No deployment requirements
- No infrastructure specifications
5. OPERATIONAL DOCUMENTATION (Missing)
- No monitoring/alerting setup
- No incident response procedures
- No backup/recovery procedures
- No scaling guidelines
IMPACT:
-------
- New developer spends weeks understanding codebase
- Security auditor can't effectively review system
- Operations team can't properly configure/monitor
- Incident response is severely hampered
- Compliance audits fail
*/
Fixed Code
# Fixed: Comprehensive Technical Documentation
## Project Documentation Structure
docs/
├── architecture/
│ ├── overview.md # System architecture overview
│ ├── components.md # Component descriptions
│ ├── data-flow.md # Data flow diagrams
│ └── decisions/ # Architecture Decision Records (ADRs)
│ ├── ADR-001-database.md
│ └── ADR-002-auth.md
├── api/
│ ├── openapi.yaml # OpenAPI/Swagger specification
│ ├── authentication.md # Auth documentation
│ └── error-codes.md # Error handling
├── security/
│ ├── threat-model.md # Threat model
│ ├── controls.md # Security controls
│ ├── data-classification.md # Data handling
│ └── encryption.md # Encryption specifications
├── operations/
│ ├── deployment.md # Deployment guide
│ ├── configuration.md # Configuration reference
│ ├── monitoring.md # Monitoring setup
│ └── runbooks/ # Operational runbooks
│ ├── incident-response.md
│ └── disaster-recovery.md
└── development/
├── setup.md # Developer setup guide
├── testing.md # Testing guidelines
└── contributing.md # Contribution guide
## 1. Architecture Documentation Example
### docs/architecture/overview.md
# Payment Processing System Architecture
## Overview
The Payment Processing System is a microservices-based platform that handles
credit card payments, refunds, and reporting for e-commerce merchants.
## Architecture Diagram
┌─────────────────────────────────────────────────────────────────┐
│ External Clients │
└───────────────────────────────┬─────────────────────────────────┘
│ HTTPS/TLS 1.3
▼
┌─────────────────────────────────────────────────────────────────┐
│ API Gateway (Kong) │
│ • Rate limiting (1000 req/min per API key) │
│ • JWT validation │
│ • Request logging │
└───────────────────────────────┬─────────────────────────────────┘
│ Internal mTLS
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Payment API │ │ Merchant API │ │ Reporting API │
│ Service │ │ Service │ │ Service │
│ (Node.js) │ │ (Node.js) │ │ (Python) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
│ │ │
┌────┴────────────────────┴────────────────────┴────┐
│ Message Queue (RabbitMQ) │
│ • Async payment processing │
│ • Event distribution │
└────────────────────────┬───────────────────────────┘
│
┌────────────────────────┴────────────────────────────┐
│ Data Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────┐ │
│ │ PostgreSQL │ │ Redis │ │ S3 │ │
│ │ (Primary DB) │ │ (Cache) │ │ (Reports) │ │
│ │ Encrypted │ │ │ │ │ │
│ └──────────────┘ └──────────────┘ └───────────┘ │
└─────────────────────────────────────────────────────┘
## Trust Boundaries
1. **External → API Gateway**: TLS termination, authentication required
2. **API Gateway → Services**: mTLS, JWT claims validated
3. **Services → Database**: Encrypted connections, service accounts
4. **Services → Payment Gateway**: PCI-DSS compliant channel
## 2. Security Documentation Example
### docs/security/controls.md
# Security Controls
## Authentication
| Control | Implementation | Standard |
|---------|---------------|----------|
| API Authentication | JWT (RS256, 15-min expiry) | OAuth 2.0 |
| Service-to-Service | mTLS with certificate rotation | NIST |
| Admin Access | MFA required, SSO via Okta | NIST 800-63B |
## Data Protection
### Data at Rest
- Database: AES-256-GCM encryption (AWS KMS)
- File Storage: S3 server-side encryption
- Backups: Encrypted with separate key
### Data in Transit
- External: TLS 1.3 only
- Internal: mTLS between all services
- Certificate pinning for payment gateway
## Access Control
```yaml
roles:
admin:
description: "Full system access"
permissions:
- "payments:*"
- "merchants:*"
- "reports:*"
- "config:*"
merchant:
description: "Merchant self-service"
permissions:
- "payments:read:own"
- "refunds:create:own"
- "reports:read:own"
support:
description: "Customer support"
permissions:
- "payments:read"
- "refunds:read"
- "merchants:read"
3. API Documentation Example
docs/api/openapi.yaml (excerpt)
openapi: 3.0.3
info:
title: Payment Processing API
version: 2.0.0
description: |
API for processing credit card payments.
## Authentication
All endpoints require Bearer token authentication.
Tokens are obtained via OAuth 2.0 client credentials flow.
## Rate Limiting
- Standard: 1000 requests/minute
- Burst: 100 requests/second
## Error Handling
All errors return standard RFC 7807 Problem Details format.
security:
- bearerAuth: []
paths:
/v2/payments:
post:
summary: Create a payment
description: |
Process a new payment transaction.
**Security Requirements:**
- Requires `payments:create` permission
- Card data must be tokenized (never send raw PAN)
- Idempotency-Key header required
parameters:
- name: Idempotency-Key
in: header
required: true
schema:
type: string
format: uuid
description: Unique key to prevent duplicate charges
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentRequest'
responses:
'201':
description: Payment created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
components:
schemas:
PaymentRequest:
type: object
required:
- amount
- currency
- card_token
- merchant_id
properties:
amount:
type: integer
minimum: 1
maximum: 99999999
description: Amount in smallest currency unit (cents)
currency:
type: string
enum: [USD, EUR, GBP]
card_token:
type: string
description: Tokenized card from vault (never raw PAN)
merchant_id:
type: string
format: uuid
4. Operational Documentation Example
docs/operations/runbooks/incident-response.md
Incident Response Runbook
Severity Levels
| Level | Definition | Response Time | Examples |
|---|---|---|---|
| SEV1 | Service down, data breach | 15 minutes | Payment processing stopped |
| SEV2 | Major degradation | 30 minutes | High error rate >5% |
| SEV3 | Minor issue | 2 hours | Single merchant affected |
| SEV4 | Low impact | Next business day | UI bug |
SEV1 Response Procedure
1. Initial Response (0-15 minutes)
- Acknowledge incident in PagerDuty
- Join incident Slack channel #incident-active
- Assign Incident Commander (IC)
- Begin investigation
2. Assessment (15-30 minutes)
- Determine scope and impact
- Check monitoring dashboards
- Review recent deployments
- Notify stakeholders
3. Mitigation
- Implement immediate fix or rollback
- Verify service restoration
- Monitor for recurrence
4. Post-Incident
- Schedule post-mortem within 48 hours
- Document timeline in incident tracker
- Create follow-up action items
---
## CVE Examples
This CWE is marked as PROHIBITED for direct CVE mapping as it represents a documentation/quality concern rather than a direct security vulnerability.
---
## Related CWEs
* **CWE-710**: Improper Adherence to Coding Standards (parent)
* **CWE-1053**: Missing Documentation for Design (child)
* **CWE-1110**: Incomplete Design Documentation (child)
* **CWE-1225**: Documentation Issues (category member)
---
## References
1. MITRE Corporation. "CWE-1059: Insufficient Technical Documentation." https://cwe.mitre.org/data/definitions/1059.html
2. NIST. "Security Documentation Requirements."
3. PCI Security Standards Council. "Documentation Requirements for PCI DSS."