Skip to content
advanced Phase 72 · Security Advanced

Security Audit

45m
1 problems
Topic Progress 0%

Security Scanning

Magento Security Scanner

# Built-in security check
bin/magento security:check

# Check for known vulnerabilities
bin/magento module:status

# Verify file integrity
bin/magento setup:verify-checksum

Automated Security Scanning

use Magento\Security\Model\Scanner\File;

class SecurityScanner
{
    private $fileScanner;
    private $logger;

    public function scan()
    {
        $results = [
            'file_permissions' => $this->scanFilePermissions(),
            'known_vulnerabilities' => $this->scanVulnerabilities(),
            'configuration' => $this->scanConfiguration(),
            'dependencies' => $this->scanDependencies(),
        ];

        return $results;
    }

    private function scanFilePermissions()
    {
        $issues = [];
        $writableDirs = ['var/', 'pub/media/', 'pub/static/', 'app/etc/'];

        foreach ($writableDirs as $dir) {
            if (!is_writable($dir)) {
                $issues[] = "Directory {$dir} is not writable";
            }
        }

        return $issues;
    }
}

External Scanning Tools

# OWASP ZAP scan
zap-cli quick-scan -s all -r https://magento.example.com

# Nikto scan
nikto -h https://magento.example.com

# SSL/TLS testing
ssltest https://magento.example.com

Key Points

  • Run security scans regularly (weekly/monthly)
  • Automate scans in CI/CD pipeline
  • Track scan results over time
  • Prioritize findings by severity

Vulnerability Assessment

Common Magento Vulnerabilities

// 1. Known Vulnerability Database
$vulnerabilities = [
    'CVE-2024-1234' => [
        'severity' => 'critical',
        'affected' => '< 2.4.6',
        'fix' => 'Upgrade to 2.4.6+',
    ],
    'CVE-2024-5678' => [
        'severity' => 'high',
        'affected' => '2.4.4-2.4.5',
        'fix' => 'Apply patch MAGETO-2024-001',
    ],
];

// 2. Configuration Vulnerabilities
$securityChecks = [
    'default_admin_credentials' => $this->checkDefaultCredentials(),
    'debug_mode_enabled' => $this->checkDebugMode(),
    'exposed_admin_url' => $this->checkAdminUrl(),
    'weak_password_policy' => $this->checkPasswordPolicy(),
];

// 3. Code Vulnerabilities
$codeIssues = [
    'sql_injection' => $this->scanForSqlInjection(),
    'xss_vulnerabilities' => $this->scanForXss(),
    'csrf_protection' => $this->checkCsrfProtection(),
    'insecure_deserialization' => $this->checkDeserialization(),
];

Risk Assessment Matrix

class RiskAssessment
{
    public function assessRisk($likelihood, $impact)
    {
        // Risk = Likelihood x Impact
        $riskScore = $likelihood * $impact;

        if ($riskScore >= 20) return 'critical';
        if ($riskScore >= 12) return 'high';
        if ($riskScore >= 6) return 'medium';
        return 'low';
    }

    public function prioritizeFixes($vulnerabilities)
    {
        usort($vulnerabilities, function($a, $b) {
            return $b['risk_score'] <=> $a['risk_score'];
        });
        return $vulnerabilities;
    }
}

Key Points

  • Assess both technical and business risks
  • Prioritize based on likelihood and impact
  • Document all findings with remediation steps
  • Track vulnerability remediation progress

Penetration Testing Basics

Testing Scope

# penetration-test-scope.yml
scope:
  targets:
    - https://magento.example.com
    - https://admin.magento.example.com
    - https://api.magento.example.com
  
  allowed_tests:
    - Authentication testing
    - Authorization testing
    - Input validation testing
    - Session management testing
    
  excluded_tests:
    - Denial of service
    - Social engineering
    - Physical access

Authentication Testing

// Test for weak passwords
$commonPasswords = [
    'admin123', 'password', 'magento123',
    '123456', 'qwerty', 'letmein',
];

foreach ($commonPasswords as $password) {
    $result = $this->tryLogin('admin', $password);
    if ($result->isSuccess()) {
        $this->report('Weak admin password found');
    }
}

// Test for brute force protection
$attempts = 0;
while ($attempts < 10) {
    $result = $this->tryLogin('admin', 'wrong_password');
    $attempts++;
    
    if ($result->isRateLimited()) {
        $this->report('Brute force protection working');
        break;
    }
}

Authorization Testing

// Test for privilege escalation
$lowPrivilegeUser = $this->loginAs('editor');

$adminEndpoints = [
    '/admin/system/config',
    '/admin/user/index',
    '/admin/dashboard',
];

foreach ($adminEndpoints as $endpoint) {
    $response = $lowPrivilegeUser->get($endpoint);
    if ($response->isOk()) {
        $this->report('Privilege escalation: ' . $endpoint);
    }
}

Key Points

  • Get written authorization before testing
  • Test in staging environment when possible
  • Document all findings with proof
  • Provide remediation recommendations

Security Audit Process

Audit Checklist

## Magento Security Audit Checklist

### Authentication & Authorization
- [ ] Default credentials changed
- [ ] Admin URL customized
- [ ] 2FA enabled for admin users
- [ ] Strong password policy enforced
- [ ] Session timeout configured
- [ ] Failed login lockout enabled

### Input Validation
- [ ] All inputs validated server-side
- [ ] SQL injection protection
- [ ] XSS prevention (output escaping)
- [ ] CSRF tokens on all forms

### Configuration Security
- [ ] Debug mode disabled in production
- [ ] Error display disabled
- [ ] File permissions secured
- [ ] Sensitive files protected

### API Security
- [ ] Rate limiting enabled
- [ ] CORS properly configured
- [ ] API tokens expired
- [ ] OAuth 2.0 implemented

Audit Report Template

class AuditReport
{
    public function generate($findings)
    {
        $report = [
            'summary' => $this->getSummary($findings),
            'critical_findings' => $this->getFindings($findings, 'critical'),
            'high_findings' => $this->getFindings($findings, 'high'),
            'medium_findings' => $this->getFindings($findings, 'medium'),
            'low_findings' => $this->getFindings($findings, 'low'),
            'recommendations' => $this->getRecommendations($findings),
        ];

        return $report;
    }
}

Key Points

  • Conduct audits quarterly or after major changes
  • Use standardized checklists
  • Track remediation progress
  • Maintain audit documentation

Practice Problems

0 / 1 solved
Security Audit Script

Create a script that performs basic security checks on a Magento installation.

Solution
<?php
$checks = [];

// Check file permissions
$writableDirs = ['var/', 'pub/media/', 'pub/static/'];
foreach ($writableDirs as $dir) {
    if (!is_writable($dir)) {
        $checks[] = ['critical', "$dir is not writable"];
    }
}

// Check debug mode
$env = require 'app/etc/env.php';
if (($env['MAGE_MODE'] ?? '') === 'developer') {
    $checks[] = ['high', 'Developer mode enabled in production'];
}

// Check default admin URL
$backend = $env['backend']['frontName'] ?? '';
if ($backend === 'admin' || empty($backend)) {
    $checks[] = ['high', 'Default admin URL not changed'];
}

// Output
foreach ($checks as $check) {
    echo "[{$check[0]}] {$check[1]}\n";
}

Quiz

1. What is the first step in a security audit?

Question 1 options

2. Which tool scans for known vulnerabilities?

Question 2 options

3. What is privilege escalation?

Question 3 options

4. How often should security audits be conducted?

Question 4 options

Flashcards

Question

Security audit first step?

Answer

Get written authorization before testing

Question

Built-in security scanner?

Answer

bin/magento security:check

Question

Privilege escalation?

Answer

Gaining unauthorized higher access levels

Question

Audit frequency?

Answer

Quarterly and after major changes

Revision Notes

Key Takeaways

  • 1. Always get authorization before security testing
  • 2. Use built-in and external tools for scanning
  • 3. Prioritize findings by risk level
  • 4. Document everything with remediation steps

Interview Tips

  • Explain the security audit process
  • Discuss common vulnerability types
  • Know how to prioritize security fixes

Cheat Sheet

Security Audit

  1. Get authorization
  2. Scan: bin/magento security:check
  3. Assess: CVSS scoring
  4. Test: authentication, authorization
  5. Report: findings + remediation