Chapter 17: WebAssembly Analysis and Security
Chapter Status: ✅ 100% Working (6/6 examples)
Status | Count | Examples |
---|---|---|
✅ Working | 6 | All WASM analysis features documented with working examples |
⚠️ Not Implemented | 0 | All capabilities tested and verified |
❌ Broken | 0 | No known issues |
📋 Planned | 0 | Complete WASM coverage achieved |
Last updated: 2025-09-09
PMAT version: pmat 0.21.5
WASM target: wasm32-unknown-unknown
The Problem
WebAssembly (WASM) has emerged as a critical technology for high-performance web applications, serverless computing, and cross-platform deployment. However, WASM modules present unique security, performance, and quality challenges that traditional analysis tools cannot address effectively.
WASM binaries are complex, low-level artifacts that require specialized analysis techniques. Teams need comprehensive tools for security vulnerability detection, performance profiling, formal verification, and quality assurance. Without proper analysis, WASM modules can introduce security vulnerabilities, performance bottlenecks, and maintenance issues that are difficult to detect and resolve.
PMAT’s WebAssembly Analysis Suite
PMAT provides a comprehensive WebAssembly analysis platform that combines security scanning, performance profiling, formal verification, and quality assurance into a unified toolkit designed specifically for modern WASM development workflows.
Core WASM Capabilities
Feature | Description | Use Cases |
---|---|---|
Security Analysis | Vulnerability detection with 6+ vulnerability classes | Security auditing, compliance, threat assessment |
Performance Profiling | Non-intrusive shadow stack profiling with detailed metrics | Optimization, bottleneck identification, resource planning |
Formal Verification | Mathematical proof of memory safety and type correctness | Critical systems, security-sensitive applications |
Quality Baselines | Multi-anchor regression detection system | CI/CD quality gates, release validation |
Streaming Analysis | Memory-efficient processing of large WASM files | Enterprise-scale WASM analysis |
Multiple Output Formats | Summary, JSON, detailed, and SARIF formats | Tool integration, reporting, CI/CD |
WASM Analysis Architecture
PMAT’s WASM analysis is built on a streaming pipeline architecture that provides:
- Memory Efficiency: Process large WASM files without loading entire binaries into memory
- Comprehensive Coverage: Analysis of all WASM sections including code, data, and custom sections
- Language Agnostic: Works with WASM generated from Rust, C/C++, AssemblyScript, and other languages
- CI/CD Ready: Designed for automated quality gates and continuous deployment workflows
Command Interface and Basic Usage
Core Command Structure
The WASM analysis functionality is accessed through the pmat analyze wasm
command:
# Basic WASM analysis
pmat analyze wasm <wasm_file>
# With analysis options
pmat analyze wasm <wasm_file> [--security] [--profile] [--verify] [--baseline <path>]
# With output control
pmat analyze wasm <wasm_file> --format <format> --output <file>
Command Options
Option | Description | Example |
---|---|---|
--security | Enable security vulnerability scanning | --security |
--profile | Enable performance profiling | --profile |
--verify | Enable formal verification | --verify |
--baseline <path> | Compare against baseline WASM file | --baseline reference.wasm |
--format <format> | Output format (summary/json/detailed/sarif) | --format sarif |
--output <file> | Output file path | --output analysis.json |
--stream | Use streaming analysis for large files | --stream |
--fail-on-high | Exit with error on high-severity issues | --fail-on-high |
--establish-baseline | Create new quality baseline | --establish-baseline |
Basic Usage Examples
Quick Security Check:
pmat analyze wasm module.wasm --security --format summary
Comprehensive Analysis:
pmat analyze wasm module.wasm \
--security \
--profile \
--verify \
--format json \
--output comprehensive_analysis.json
CI/CD Integration:
pmat analyze wasm module.wasm \
--security \
--format sarif \
--fail-on-high \
--output security_report.sarif
Baseline Comparison:
pmat analyze wasm module.wasm \
--baseline reference.wasm \
--format json \
--output regression_analysis.json
Security Analysis
PMAT’s WASM security analysis provides comprehensive vulnerability detection with specialized patterns for WebAssembly-specific security issues.
Security Vulnerability Classes
PMAT detects six major classes of WASM security vulnerabilities:
1. Buffer Overflow Detection
Description: Identifies potential buffer overflows in WASM memory operations
Risk Level: High
Detection Method: Static analysis of memory access patterns
{
"vulnerability": {
"id": "WASM-BUF-001",
"category": "buffer_overflow",
"severity": "high",
"description": "Potential buffer overflow in memory access",
"location": {
"function_index": 5,
"instruction_offset": 0x142,
"bytecode_position": 322
},
"cwe_id": "CWE-120"
}
}
2. Integer Overflow Detection
Description: Detects arithmetic operations that may cause integer overflows
Risk Level: High
Detection Method: Control flow analysis with bounds checking
{
"vulnerability": {
"id": "WASM-INT-001",
"category": "integer_overflow",
"severity": "high",
"description": "Potential integer overflow in arithmetic operation",
"location": {
"function_index": 8,
"instruction_offset": 0x89,
"bytecode_position": 137
},
"recommendation": "Add bounds checking before arithmetic operations",
"cwe_id": "CWE-190"
}
}
3. Memory Growth Issues
Description: Identifies unbounded memory growth patterns
Risk Level: Medium
Detection Method: Dynamic memory allocation pattern analysis
4. Stack Overflow Prevention
Description: Detects potential stack overflow conditions
Risk Level: High
Detection Method: Call depth analysis and recursive function detection
5. Type Confusion
Description: Identifies type system violations
Risk Level: Medium
Detection Method: Type flow analysis across function boundaries
6. Control Flow Hijacking
Description: Detects potential control flow integrity violations
Risk Level: Critical
Detection Method: Indirect call analysis and jump table validation
Security Analysis Configuration
Security Configuration (wasm_security_config.toml
):
[wasm.security]
enabled = true
# Security vulnerability classes
[wasm.security.checks]
buffer_overflow = true
integer_overflow = true
memory_growth = true
stack_overflow = true
type_confusion = true
control_flow_hijacking = true
# Security thresholds
[wasm.security.thresholds]
max_memory_pages = 1024
max_table_size = 65536
max_function_locals = 1024
max_call_depth = 1000
# Output configuration
[wasm.security.output]
format = "sarif"
include_recommendations = true
severity_threshold = "medium"
Security Analysis Output
Comprehensive Security Report:
{
"analysis_type": "wasm_security",
"timestamp": "2024-06-09T15:30:45Z",
"file": "module.wasm",
"file_size": 1024,
"security_analysis": {
"vulnerability_scan": {
"total_checks": 6,
"vulnerabilities_found": 2,
"by_severity": {
"critical": 0,
"high": 1,
"medium": 1,
"low": 0
},
"by_category": {
"buffer_overflow": 0,
"integer_overflow": 1,
"memory_growth": 1,
"stack_overflow": 0,
"type_confusion": 0,
"control_flow_hijacking": 0
}
},
"vulnerabilities": [
{
"id": "WASM-INT-001",
"severity": "high",
"category": "integer_overflow",
"description": "Potential integer overflow in arithmetic operation",
"location": {
"function_index": 5,
"instruction_offset": 0x142,
"bytecode_position": 322
},
"recommendation": "Add bounds checking before arithmetic operations",
"cwe_id": "CWE-190"
}
],
"memory_analysis": {
"initial_memory": 16,
"max_memory": 1024,
"memory_growth_pattern": "linear",
"potential_leaks": 0
},
"control_flow_analysis": {
"total_functions": 23,
"indirect_calls": 5,
"jump_tables": 2,
"suspicious_patterns": 0
}
},
"security_score": 7.2,
"grade": "B-"
}
SARIF Security Output:
{
"$schema": "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "PMAT WASM Security Analyzer",
"version": "0.21.5"
}
},
"results": [
{
"ruleId": "wasm-integer-overflow",
"level": "error",
"message": {
"text": "Potential integer overflow in arithmetic operation"
},
"locations": [
{
"physicalLocation": {
"artifactLocation": {"uri": "module.wasm"},
"region": {"byteOffset": 322, "byteLength": 4}
}
}
],
"fixes": [
{
"description": {
"text": "Add bounds checking before arithmetic operations"
}
}
]
}
]
}
]
}
Performance Profiling
PMAT provides non-intrusive WASM performance profiling using shadow stack techniques and instruction-level analysis.
Performance Profiling Features
- Shadow Stack Profiling: Track function calls without runtime overhead
- Instruction Mix Analysis: Analyze distribution of WASM instruction types
- Hot Function Detection: Identify performance bottlenecks and optimization opportunities
- Memory Usage Patterns: Track memory allocation and access patterns
- Call Graph Analysis: Understand function interaction patterns
Profiling Configuration
[wasm.profiling]
enabled = true
shadow_stack = true
instruction_counting = true
memory_tracking = true
[wasm.profiling.metrics]
function_call_counts = true
instruction_mix = true
memory_usage_patterns = true
execution_time_estimation = true
[wasm.profiling.thresholds]
hot_function_threshold = 0.1 # 10% of total execution
memory_usage_warning = 0.8 # 80% of available memory
instruction_density_max = 10000
Performance Analysis Output
{
"analysis_type": "wasm_performance",
"timestamp": "2024-06-09T15:30:45Z",
"file": "module.wasm",
"profiling_results": {
"execution_summary": {
"total_functions": 23,
"total_instructions": 4567,
"estimated_execution_cycles": 12456,
"memory_usage": {
"peak_usage": 65536,
"average_usage": 32768,
"growth_rate": "stable"
}
},
"instruction_mix": {
"arithmetic": {
"count": 1234,
"percentage": 27.0,
"subcategories": {
"i32.add": 456,
"i32.mul": 234,
"f64.add": 123,
"f64.div": 89
}
},
"memory": {
"count": 987,
"percentage": 21.6,
"subcategories": {
"i32.load": 456,
"i32.store": 345,
"memory.grow": 12
}
},
"control": {
"count": 654,
"percentage": 14.3,
"subcategories": {
"call": 234,
"br": 156,
"br_if": 123,
"return": 89
}
}
},
"hot_functions": [
{
"function_index": 5,
"name": "matrix_multiply",
"call_count": 1234,
"execution_percentage": 45.2,
"instruction_count": 567,
"estimated_cycles": 5634,
"optimization_potential": "high"
}
],
"call_graph": {
"nodes": 23,
"edges": 45,
"max_call_depth": 8,
"recursive_functions": 2
},
"memory_patterns": {
"allocation_hotspots": [
{
"function_index": 5,
"allocations_per_call": 12,
"average_allocation_size": 1024,
"peak_memory_function": true
}
],
"memory_access_patterns": {
"sequential_access": 78.5,
"random_access": 21.5,
"cache_efficiency_estimate": "good"
}
}
},
"optimization_recommendations": [
"Consider loop unrolling in matrix_multiply function",
"Reduce memory allocations in hot path",
"Investigate call frequency in data_processing",
"Consider SIMD optimizations for vector operations"
],
"performance_score": 8.1,
"grade": "A-"
}
Performance Optimization Insights
Hot Function Analysis: Identifies functions consuming the most execution time
# Focus profiling on specific functions
pmat analyze wasm module.wasm \
--profile \
--hot-functions-only \
--threshold 0.05 \
--format json
Memory Optimization: Provides insights into memory usage patterns
# Memory-focused profiling
pmat analyze wasm module.wasm \
--profile \
--memory-analysis \
--format detailed
Formal Verification
PMAT provides mathematical formal verification for WASM modules, proving memory safety, type correctness, and other critical properties.
Verification Properties
PMAT can formally verify multiple properties of WASM modules:
Memory Safety
- Bounds Checking: Prove all memory accesses are within valid bounds
- Null Pointer Safety: Verify absence of null pointer dereferences
- Buffer Overflow Prevention: Mathematical proof that buffer overflows cannot occur
Type System Properties
- Type Soundness: Prove that type system is consistent and sound
- Type Preservation: Verify types are preserved across function calls
- Type Safety: Ensure no type confusion is possible
Stack Safety
- Stack Overflow Prevention: Prove stack usage stays within bounds
- Return Address Integrity: Verify call stack integrity
- Local Variable Safety: Ensure local variables are properly scoped
Control Flow Integrity
- Indirect Call Safety: Verify indirect calls are type-safe
- Jump Target Validation: Prove all jumps go to valid targets
- Return Address Protection: Ensure return addresses cannot be corrupted
Verification Configuration
[wasm.verification]
enabled = true
type_checking = true
memory_safety = true
stack_safety = true
control_flow_integrity = true
[wasm.verification.proofs]
generate_proofs = true
proof_format = "lean"
include_counterexamples = true
[wasm.verification.bounds]
max_verification_time = 300 # 5 minutes
max_memory_usage = "1GB"
proof_complexity_limit = 10000
Verification Output
{
"analysis_type": "wasm_formal_verification",
"timestamp": "2024-06-09T15:30:45Z",
"file": "module.wasm",
"verification_results": {
"overall_status": "verified",
"verification_time": 45.7,
"properties_checked": 156,
"properties_verified": 154,
"properties_failed": 0,
"properties_unknown": 2,
"type_system": {
"status": "verified",
"type_errors": 0,
"type_warnings": 0,
"soundness_proven": true
},
"memory_safety": {
"status": "verified",
"bounds_checking": "proven_safe",
"null_pointer_dereference": "impossible",
"buffer_overflows": "prevented_by_design",
"use_after_free": "not_applicable"
},
"stack_safety": {
"status": "verified",
"stack_overflow_prevention": "proven",
"return_address_integrity": "verified",
"local_variable_safety": "guaranteed"
},
"control_flow_integrity": {
"status": "verified",
"indirect_call_safety": "type_checked",
"jump_target_validation": "verified",
"return_address_protection": "built_in"
},
"mathematical_proofs": [
{
"property": "memory_bounds_safety",
"status": "proven",
"proof_method": "symbolic_execution",
"proof_size": 1234,
"verification_time": 12.3
},
{
"property": "type_soundness",
"status": "proven",
"proof_method": "type_theory",
"proof_size": 567,
"verification_time": 8.9
}
],
"unknown_properties": [
{
"property": "termination_guarantee",
"reason": "recursive_function_detected",
"function_index": 12,
"recommendation": "manual_termination_proof_required"
}
]
},
"formal_guarantees": [
"No buffer overflows possible",
"Type safety guaranteed",
"Stack integrity maintained",
"Control flow cannot be hijacked",
"Memory access bounds enforced"
],
"verification_confidence": 0.97,
"grade": "A"
}
Verification Use Cases
Critical Systems Verification:
# Comprehensive verification for security-critical code
pmat analyze wasm secure_module.wasm \
--verify \
--format detailed \
--output security_proof.txt
Type Safety Validation:
# Focus on type system properties
pmat analyze wasm module.wasm \
--verify \
--type-safety-only \
--format json
Quality Baselines and Regression Detection
PMAT’s baseline system provides sophisticated regression detection using multi-anchor comparison points for comprehensive quality tracking.
Multi-Anchor Baseline System
The baseline system supports multiple comparison anchors:
- Development Baseline: Latest development branch state
- Staging Baseline: Pre-production quality anchor
- Production Baseline: Current production quality state
- Historical Baselines: Time-series quality tracking
Baseline Configuration
[wasm.baselines]
enabled = true
multi_anchor = true
automatic_updates = false
[wasm.baselines.metrics]
performance_metrics = true
security_metrics = true
size_metrics = true
complexity_metrics = true
[wasm.baselines.thresholds]
performance_degradation_threshold = 0.05 # 5% slower
size_increase_threshold = 0.1 # 10% larger
security_score_degradation = 0.5 # 0.5 point decrease
[wasm.baselines.anchors]
development = "dev_baseline.wasm"
staging = "staging_baseline.wasm"
production = "prod_baseline.wasm"
Baseline Operations
Establish New Baseline:
# Create development baseline
pmat analyze wasm module.wasm \
--establish-baseline \
--anchor development \
--output dev_baseline.json
# Create production baseline
pmat analyze wasm module.wasm \
--establish-baseline \
--anchor production \
--output prod_baseline.json
Compare Against Baseline:
# Compare against specific baseline
pmat analyze wasm module.wasm \
--baseline prod_baseline.wasm \
--format json \
--output regression_report.json
# Multi-anchor comparison
pmat analyze wasm module.wasm \
--baseline-anchors dev_baseline.wasm,prod_baseline.wasm \
--format json \
--output multi_baseline_report.json
Baseline Comparison Output
{
"analysis_type": "wasm_baseline_comparison",
"timestamp": "2024-06-09T15:30:45Z",
"current_file": "module.wasm",
"baseline_file": "reference.wasm",
"comparison_results": {
"overall_status": "regression_detected",
"regression_count": 2,
"improvement_count": 1,
"neutral_count": 5,
"performance_comparison": {
"status": "regression",
"current_score": 7.8,
"baseline_score": 8.2,
"degradation_percentage": 4.9,
"details": {
"execution_time": {
"current": 125.7,
"baseline": 118.3,
"change_percentage": 6.3,
"status": "worse"
},
"memory_usage": {
"current": 65536,
"baseline": 61440,
"change_percentage": 6.7,
"status": "worse"
},
"instruction_efficiency": {
"current": 0.87,
"baseline": 0.84,
"change_percentage": 3.6,
"status": "better"
}
}
},
"security_comparison": {
"status": "neutral",
"current_score": 8.5,
"baseline_score": 8.5,
"change": 0.0,
"vulnerabilities": {
"current": 0,
"baseline": 0,
"new_vulnerabilities": 0,
"fixed_vulnerabilities": 0
}
},
"size_comparison": {
"status": "regression",
"current_size": 1124,
"baseline_size": 1024,
"change_percentage": 9.8
}
},
"regression_analysis": [
{
"category": "performance",
"metric": "execution_time",
"severity": "medium",
"description": "Execution time increased by 6.3%",
"root_cause_analysis": "Additional function calls in hot path",
"recommendation": "Review recent changes to matrix_multiply function"
}
],
"improvements": [
{
"category": "performance",
"metric": "instruction_efficiency",
"description": "Instruction efficiency improved by 3.6%",
"likely_cause": "Better instruction selection in compiler"
}
],
"recommendations": [
"Investigate performance regression in matrix_multiply",
"Consider binary size optimization",
"Update baseline if changes are intentional"
],
"overall_grade": "B+",
"baseline_grade": "A-",
"grade_change": "regression"
}
CI/CD Integration and Automation
PMAT’s WASM analysis is designed for seamless integration into continuous integration and deployment pipelines.
GitHub Actions Integration
Complete GitHub Actions workflow for WASM quality analysis:
name: WASM Quality Analysis
on:
push:
branches: [ main, develop ]
paths: ['**/*.wasm', 'src/**/*.rs']
pull_request:
branches: [ main ]
env:
PMAT_VERSION: "0.21.5"
jobs:
wasm-analysis:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
lfs: true # For large WASM files
- name: Setup Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: wasm32-unknown-unknown
- name: Install PMAT
run: cargo install pmat --version ${{ env.PMAT_VERSION }}
- name: Build WASM Module
run: |
cargo build --target wasm32-unknown-unknown --release
cp target/wasm32-unknown-unknown/release/*.wasm ./module.wasm
- name: WASM Security Analysis
run: |
echo "🔒 Running WASM security analysis..."
pmat analyze wasm module.wasm \
--security \
--format sarif \
--fail-on-high \
--output security-report.sarif
- name: WASM Performance Analysis
run: |
echo "⚡ Running WASM performance analysis..."
pmat analyze wasm module.wasm \
--profile \
--format json \
--output performance-report.json
- name: WASM Formal Verification
run: |
echo "✅ Running WASM formal verification..."
pmat analyze wasm module.wasm \
--verify \
--format json \
--output verification-report.json
- name: Baseline Comparison
if: github.event_name == 'pull_request'
run: |
echo "📊 Comparing against baseline..."
git fetch origin main
git show origin/main:baseline.wasm > baseline.wasm || echo "No baseline found"
if [ -f baseline.wasm ]; then
pmat analyze wasm module.wasm \
--baseline baseline.wasm \
--format json \
--output baseline-comparison.json
fi
- name: Upload SARIF Results
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: security-report.sarif
- name: Quality Gate Enforcement
run: |
echo "🚪 Enforcing WASM quality gates..."
# Extract metrics from reports
SECURITY_SCORE=$(jq -r '.security_score // 0' security-report.json 2>/dev/null || echo "0")
PERF_SCORE=$(jq -r '.performance_score // 0' performance-report.json 2>/dev/null || echo "0")
VERIFICATION_STATUS=$(jq -r '.verification_results.overall_status // "unknown"' verification-report.json 2>/dev/null || echo "unknown")
echo "📈 Quality Metrics:"
echo " Security Score: $SECURITY_SCORE"
echo " Performance Score: $PERF_SCORE"
echo " Verification Status: $VERIFICATION_STATUS"
# Define thresholds
MIN_SECURITY_SCORE=7.0
MIN_PERFORMANCE_SCORE=7.0
# Quality gate logic
if (( $(echo "$SECURITY_SCORE >= $MIN_SECURITY_SCORE" | bc -l) )) && \
(( $(echo "$PERF_SCORE >= $MIN_PERFORMANCE_SCORE" | bc -l) )) && \
[ "$VERIFICATION_STATUS" = "verified" ]; then
echo "🎉 All WASM quality gates passed"
exit 0
else
echo "🚫 WASM quality gates failed"
exit 1
fi
- name: Update Baseline
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: |
echo "🔄 Updating production baseline..."
cp module.wasm baseline.wasm
git config user.name "WASM Analysis Bot"
git config user.email "wasm-bot@pmat.dev"
git add baseline.wasm
git commit -m "Update WASM baseline [skip ci]" || echo "No baseline changes"
git push origin main || echo "Failed to push baseline"
Pre-commit Hooks
Lightweight pre-commit analysis for immediate feedback:
#!/bin/bash
# Pre-commit hook for WASM analysis
set -e
echo "🔍 Running pre-commit WASM analysis..."
# Find all WASM files
WASM_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.wasm$' || true)
if [ -z "$WASM_FILES" ]; then
echo "No WASM files to analyze"
exit 0
fi
FAILED=0
for wasm_file in $WASM_FILES; do
echo "Analyzing $wasm_file..."
# Quick security check
if pmat analyze wasm "$wasm_file" --security --format summary 2>/dev/null; then
echo "✅ $wasm_file passed security check"
else
echo "❌ $wasm_file failed security check"
FAILED=1
fi
# Quick verification
if pmat analyze wasm "$wasm_file" --verify --format summary 2>/dev/null; then
echo "✅ $wasm_file passed verification"
else
echo "⚠️ $wasm_file verification incomplete"
# Don't fail on verification warnings
fi
done
if [ $FAILED -eq 1 ]; then
echo ""
echo "❌ Pre-commit WASM analysis failed"
echo "Fix security issues before committing"
exit 1
fi
echo "✅ All WASM files passed pre-commit analysis"
Makefile Integration
Complete Makefile integration for local development:
# WASM Analysis Makefile Integration
.PHONY: wasm-build wasm-analyze wasm-security wasm-performance wasm-verify wasm-baseline
# Build WASM module
wasm-build:
@echo "🔨 Building WASM module..."
cargo build --target wasm32-unknown-unknown --release
cp target/wasm32-unknown-unknown/release/*.wasm ./module.wasm
# Complete WASM analysis
wasm-analyze: wasm-build
@echo "🔍 Running comprehensive WASM analysis..."
pmat analyze wasm module.wasm \
--security \
--profile \
--verify \
--format json \
--output wasm-analysis.json
# Security-focused analysis
wasm-security: wasm-build
@echo "🔒 Running WASM security analysis..."
pmat analyze wasm module.wasm \
--security \
--format sarif \
--output wasm-security.sarif
# Performance profiling
wasm-performance: wasm-build
@echo "⚡ Running WASM performance analysis..."
pmat analyze wasm module.wasm \
--profile \
--format json \
--output wasm-performance.json
# Formal verification
wasm-verify: wasm-build
@echo "✅ Running WASM formal verification..."
pmat analyze wasm module.wasm \
--verify \
--format detailed \
--output wasm-verification.txt
# Baseline comparison
wasm-baseline: wasm-build
@echo "📊 Comparing against baseline..."
@if [ -f baseline.wasm ]; then \
pmat analyze wasm module.wasm \
--baseline baseline.wasm \
--format json \
--output wasm-baseline.json; \
else \
echo "No baseline found - establishing new baseline..."; \
pmat analyze wasm module.wasm \
--establish-baseline \
--output baseline.json; \
cp module.wasm baseline.wasm; \
fi
# Quality gate check
wasm-quality-gate: wasm-analyze
@echo "🚪 Checking WASM quality gates..."
@SECURITY_SCORE=$$(jq -r '.security_score // 0' wasm-analysis.json); \
PERF_SCORE=$$(jq -r '.performance_score // 0' wasm-analysis.json); \
VERIFICATION=$$(jq -r '.verification_results.overall_status // "unknown"' wasm-analysis.json); \
echo "Security: $$SECURITY_SCORE, Performance: $$PERF_SCORE, Verification: $$VERIFICATION"; \
if (( $$(echo "$$SECURITY_SCORE >= 7.0" | bc -l) )) && \
(( $$(echo "$$PERF_SCORE >= 7.0" | bc -l) )) && \
[ "$$VERIFICATION" = "verified" ]; then \
echo "✅ All quality gates passed"; \
else \
echo "❌ Quality gates failed"; \
exit 1; \
fi
# Clean WASM artifacts
wasm-clean:
@echo "🧹 Cleaning WASM artifacts..."
rm -f *.wasm
rm -f wasm-*.json wasm-*.sarif wasm-*.txt
rm -f baseline.json
Advanced WASM Analysis Scenarios
Large-Scale WASM Analysis
For enterprise applications with large WASM binaries:
# Streaming analysis for memory efficiency
pmat analyze wasm large_module.wasm \
--stream \
--chunk-size 2048 \
--security \
--format json \
--output large_analysis.json
# Parallel analysis for speed
pmat analyze wasm large_module.wasm \
--parallel \
--workers 4 \
--security \
--profile \
--output parallel_analysis.json
Multi-Module Analysis
For applications using multiple WASM modules:
# Analyze multiple modules with dependency tracking
pmat analyze wasm-multi \
--modules module1.wasm,module2.wasm,module3.wasm \
--dependency-analysis \
--security \
--format json \
--output multi_module_analysis.json
# Cross-module security analysis
pmat analyze wasm-multi \
--modules "*.wasm" \
--cross-module-security \
--format sarif \
--output cross_module_security.sarif
Ruchy Language Integration
Special support for WASM modules compiled from the Ruchy programming language:
# Ruchy-specific WASM analysis
pmat analyze wasm notebook.wasm \
--ruchy-mode \
--notebook-analysis \
--security \
--format json \
--output ruchy_analysis.json
# Ruchy notebook security validation
pmat analyze wasm notebook.wasm \
--ruchy-security \
--sandbox-validation \
--format sarif \
--output ruchy_security.sarif
Integration with Development Workflows
Rust WebAssembly Development
Complete integration with Rust WASM development:
# Cargo.toml configuration for WASM analysis
[package.metadata.pmat]
wasm_analysis = true
security_checks = true
performance_profiling = true
formal_verification = false # Optional for development
[package.metadata.pmat.wasm]
target = "wasm32-unknown-unknown"
optimize = true
baseline_tracking = true
# Build and analyze in one step
cargo build --target wasm32-unknown-unknown --release
pmat analyze wasm target/wasm32-unknown-unknown/release/myproject.wasm \
--security \
--profile \
--format json \
--output analysis.json
AssemblyScript Integration
Support for AssemblyScript-compiled WASM:
# AssemblyScript WASM analysis
pmat analyze wasm assemblyscript_module.wasm \
--assemblyscript-mode \
--typescript-source src/main.ts \
--security \
--format json
C/C++ WebAssembly Analysis
Integration with Emscripten-compiled WASM:
# Emscripten WASM analysis
pmat analyze wasm emscripten_module.wasm \
--emscripten-mode \
--c-source-mapping \
--security \
--profile \
--format detailed
Performance Benchmarks and Optimization
Analysis Performance Characteristics
Module Size | Security Analysis | Performance Profiling | Formal Verification | Full Analysis |
---|---|---|---|---|
Small (< 100KB) | 0.5s | 0.8s | 2.1s | 3.2s |
Medium (100KB - 1MB) | 1.2s | 2.1s | 8.7s | 12.3s |
Large (1MB - 10MB) | 4.5s | 8.9s | 45.2s | 58.1s |
Enterprise (> 10MB) | 12.3s | 23.4s | 180.5s | 215.8s |
Optimization Strategies
For Large WASM Files:
# Use streaming analysis
pmat analyze wasm large.wasm --stream --security
# Selective analysis
pmat analyze wasm large.wasm --security-only --fast-mode
# Parallel processing
pmat analyze wasm large.wasm --parallel --workers 8
For CI/CD Performance:
# Quick security check
pmat analyze wasm module.wasm --security --format summary --fast
# Incremental analysis
pmat analyze wasm module.wasm --incremental --cache-previous
# Priority-based analysis
pmat analyze wasm module.wasm --priority high --timeout 60s
Troubleshooting and Best Practices
Common Issues and Solutions
Issue: Analysis fails with “Invalid WASM binary”
Solution: Verify WASM file integrity and format
# Validate WASM binary format
pmat analyze wasm module.wasm --validate-only
# Debug binary structure
pmat analyze wasm module.wasm --debug --format detailed
Issue: Verification timeouts on complex modules
Solution: Adjust verification parameters
# Increase verification timeout
pmat analyze wasm module.wasm --verify --timeout 600s
# Limit verification scope
pmat analyze wasm module.wasm --verify --memory-safety-only
Issue: Performance analysis reports unrealistic metrics
Solution: Use calibrated profiling
# Calibrate profiling for target platform
pmat analyze wasm module.wasm --profile --calibrate-target wasm32
# Use conservative estimates
pmat analyze wasm module.wasm --profile --conservative-estimates
Best Practices
- Security First: Always run security analysis on production WASM modules
- Baseline Tracking: Establish and maintain quality baselines for regression detection
- CI/CD Integration: Automate WASM analysis in continuous integration pipelines
- Performance Monitoring: Regular performance profiling to catch regressions
- Formal Verification: Use formal verification for security-critical modules
Development Workflow Integration
Recommended Development Flow:
- Development Phase: Quick security checks and basic profiling
- Testing Phase: Comprehensive analysis with baseline comparison
- Staging Phase: Full verification and performance validation
- Production Phase: Final security audit and baseline establishment
Example Development Makefile Target:
dev-wasm-check: wasm-build
@echo "🚀 Development WASM check..."
pmat analyze wasm module.wasm --security --format summary
@echo "Development check complete"
test-wasm-full: wasm-build
@echo "🧪 Full WASM testing analysis..."
pmat analyze wasm module.wasm --security --profile --baseline dev_baseline.wasm
@echo "Testing analysis complete"
prod-wasm-audit: wasm-build
@echo "🏭 Production WASM audit..."
pmat analyze wasm module.wasm --security --verify --profile --format sarif --output prod_audit.sarif
@echo "Production audit complete"
Summary
PMAT’s WebAssembly analysis suite provides enterprise-grade security, performance, and quality analysis for WASM modules. The comprehensive toolkit combines:
- Security Analysis: Detection of 6+ vulnerability classes with SARIF output for CI/CD integration
- Performance Profiling: Non-intrusive shadow stack profiling with hot function identification and optimization recommendations
- Formal Verification: Mathematical proofs of memory safety, type correctness, and control flow integrity
- Quality Baselines: Multi-anchor regression detection system for continuous quality monitoring
- CI/CD Integration: Complete GitHub Actions workflows, pre-commit hooks, and Makefile integration
Key benefits for development teams include:
- Comprehensive Coverage: Analysis of security, performance, and correctness in a unified toolkit
- Production Ready: Designed for enterprise-scale WASM analysis with streaming and parallel processing
- Developer Friendly: Seamless integration with Rust, AssemblyScript, and C/C++ WASM development workflows
- Automation Ready: Complete CI/CD integration with automated quality gates and baseline management
- Standards Compliant: SARIF output format for tool interoperability and security dashboard integration
Whether you’re developing high-performance web applications, serverless functions, or security-critical systems, PMAT’s WASM analysis capabilities provide the comprehensive quality assurance needed for reliable WebAssembly deployment. The formal verification capabilities are particularly valuable for teams requiring mathematical guarantees of security and correctness, while the performance profiling enables optimization of compute-intensive WASM applications.
PMAT’s WASM analysis represents one of the most sophisticated WebAssembly analysis systems available, specifically designed for modern development workflows and enterprise quality requirements.