Security Review Skill
Security Review Skill
Defend before attackers find the gaps.
⚠️ Staleness Warning
Security practices evolve with new threats, vulnerabilities, and industry standards.
Refresh triggers:
- New CVEs affecting our stack
- Microsoft SFI updates
- Major security incidents (industry-wide)
- Dependency security advisories
- Compliance requirement changes
Last validated: February 2026
Check current state: Microsoft SFI, OWASP, CVE Database
Core Principle
Security is not a feature—it's a property. Review code with adversarial thinking.
Microsoft Secure Future Initiative (SFI)
Microsoft's approach to security-first development:
SFI Core Principles
| Principle | Focus |
|---|---|
| Secure by Design | Security comes first when designing any product or service |
| Secure by Default | Protections enabled/enforced by default, require no extra effort, not optional |
| Secure Operations | Security controls and monitoring continuously improved for current/future threats |
Satya's Mandate (May 2024): "If you're faced with the tradeoff between security and another priority, your answer is clear: Do security."
SFI Foundations
Four foundations that underpin successful security operations:
| Foundation | Description |
|---|---|
| Security-first Culture | Daily behaviors reinforced through regular meetings between engineering and SFI leaders |
| Security Governance | Framework led by CISO, partnering with engineering teams to oversee SFI and manage risks |
| Continuous Improvement | Growth mindset integrating feedback and learnings from incidents into standards |
| Paved Paths & Standards | Best practices that optimize productivity, compliance, and security at scale |
SFI Six Pillars
| Pillar | Focus |
|---|---|
| Protect Identities & Secrets | Best-in-class standards for identity/secrets infrastructure, phishing-resistant MFA |
| Protect Tenants & Isolate Systems | Tenant isolation and production system protection |
| Protect Networks | Network security and segmentation |
| Protect Engineering Systems | Secure development infrastructure and CI/CD |
| Monitor & Detect Cyberthreats | Continuous threat monitoring and detection |
| Accelerate Response & Remediation | Fast incident response and recovery |
Secure by Design Checklist
Before coding:
- Authentication method defined
- Authorization model designed
- Data classification done
- Encryption requirements clear
- Logging requirements defined
- Third-party dependencies reviewed
Secure by Default Patterns
// Bad: Optional security
createServer({ https: false, cors: '*' });
// Good: Secure by default
createServer({
https: true,
cors: ['https://trusted.com'],
helmet: true
});
Principle of Least Privilege:
// Bad: Admin access by default
const user = { role: 'admin', permissions: ['*'] };
// Good: Minimum permissions
const user = { role: 'viewer', permissions: ['read:own'] };
Input Validation:
// Validate and sanitize ALL input
function processInput(input: unknown) {
const validated = schema.parse(input); // Zod, Joi, etc.
const sanitized = sanitize(validated);
return sanitized;
}
OWASP Top 10
| # | Vulnerability | What to Check | Prevention |
|---|---|---|---|
| 1 | Broken Access Control | Check permissions on every request | Authorization on all routes |
| 2 | Cryptographic Failures | Use strong, modern crypto | TLS 1.2+, proper key management |
| 3 | Injection | SQL, NoSQL, LDAP, OS commands | Parameterized queries, no string concat |
| 4 | Insecure Design | Threat modeling, secure patterns | STRIDE analysis pre-implementation |
| 5 | Security Misconfiguration | Secure defaults, remove unused features | Hardened configs, no default passwords |
| 6 | Vulnerable Components | Dependency scanning, updates | npm audit, regular updates |
| 7 | Auth Failures | MFA, secure session management | Strong passwords, session timeout |
| 8 | Data Integrity | Signatures, checksums | Tamper detection |
| 9 | Logging Failures | Comprehensive audit logging | Monitor security events |
| 10 | SSRF | Allowlist URLs, validate requests | Input validation, URL allowlisting |
Threat Modeling (STRIDE)
| Threat | Question | Mitigation |
|---|---|---|
| Spoofing | Can attacker impersonate? | Strong authentication, phishing-resistant MFA |
| Tampering | Can data be modified? | Integrity checks, signatures, checksums |
| Repudiation | Can actions be denied? | Audit logging, non-repudiation mechanisms |
| Information Disclosure | Can secrets leak? | Encryption at rest/transit, access control |
| Denial of Service | Can system be overwhelmed? | Rate limiting, quotas, redundancy |
| Elevation of Privilege | Can attacker gain access? | Least privilege, authorization checks |
Code Review Security Lens
Authentication
□ Passwords hashed with bcrypt/argon2 (not MD5/SHA1)
□ No hardcoded credentials
□ Session tokens are random, rotated, and expire
□ Failed login attempts are rate-limited
□ MFA supported where appropriate
Authorization
□ Every endpoint has explicit access control
□ No security through obscurity (hidden URLs)
□ Resource ownership verified before access
□ Admin functions require elevated auth
□ Deny by default, allow explicitly
Input Validation
□ All input validated on server (not just client)
□ Allowlist validation preferred over blocklist
□ File uploads restricted by type and size
□ URL redirects validated against allowlist
□ JSON/XML parsing has size limits
Data Protection
□ Sensitive data encrypted at rest
□ TLS 1.2+ for data in transit
□ API keys/secrets in env vars, not code
□ PII minimized and retention limited
□ Logs don't contain passwords/tokens/PII
Dependencies
□ npm audit / pip audit / cargo audit clean
□ No deprecated or unmaintained packages
□ Dependabot or Renovate enabled
□ Lock files committed
□ Known CVE check before release
Credential Management
Never Hardcode
// NEVER
const apiKey = 'sk-1234567890abcdef';
// ALWAYS
const apiKey = process.env.API_KEY;
// Or: Azure Key Vault, AWS Secrets Manager, etc.
Rotation Policy
| Credential Type | Rotation Period |
|---|---|
| API Keys | 90 days |
| Service Passwords | 90 days |
| Certificates | 1 year |
| User Passwords | User discretion + breach response |
Secrets in Git
If secrets accidentally committed:
- Revoke immediately — The secret is compromised
- Remove from history —
git filter-branchor BFG - Rotate — Generate new credentials
- Audit — Check for unauthorized use
Dependency Security
Regular Audits
# npm
npm audit
npm audit fix
# Check for outdated
npm outdated
Automated Scanning
- Dependabot (GitHub)
- Snyk
- npm audit in CI/CD
Update Strategy
| Severity | Response Time |
|---|---|
| Critical | 24-48 hours |
| High | 1 week |
| Medium | 2 weeks |
| Low | Next release |
Security Code Review Checklist
Pre-Merge Gate
- No hardcoded secrets
- Input validation present
- Output encoding for XSS
- SQL uses parameterized queries
- Auth checks on all endpoints
- Sensitive data encrypted
- Errors don't leak info
- Dependencies up to date
Red Flags
🚩 eval(), exec(), dangerouslySetInnerHTML
🚩 String concatenation in queries
🚩 Disabled security features
🚩 Overly permissive CORS
🚩 Secrets in code or config files
🚩 Missing rate limiting
🚩 Verbose error messages
Common Vulnerabilities by Language
| Language | Watch For |
|---|---|
| JavaScript | Prototype pollution, eval(), innerHTML |
| TypeScript | Type assertions bypassing validation |
| Python | pickle deserialization, format strings |
| SQL | String concatenation in queries |
| Shell | Command injection, unquoted variables |
Security Headers Checklist
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000
X-XSS-Protection: 0 (deprecated, use CSP)
Quick Security Questions
Before shipping, ask:
- What's the worst thing an attacker could do?
- What data could leak if this endpoint is exposed?
- Who should NOT have access to this?
- What happens if input is malicious?
- Are we trusting anything we shouldn't?
Incident Response Connection
When vulnerability found:
- Assess: What's the blast radius?
- Contain: Can we disable the feature?
- Fix: Patch the vulnerability
- Verify: Confirm fix works
- Learn: Update review checklist
See incident-response for full IR workflow.
Synapses
See synapses.json for connections.
Consolidated: 2026-02-19 Sources: security-review (2026-02-01) + microsoft-sfi