Skip to content

Security: simonhedlund-exs/azure-bulk-toggle

Security

SECURITY.md

🔒 Säkerhetsdokumentation - Azure Bulk Toggle Extension

✅ Säkerhetsåtgärder implementerade

1. Token-säkerhet

  • Ingen token-loggning - Tokens loggas ALDRIG i klartext i console
  • Token-längd visas - Endast längd visas för debugging (t.ex. "✓ (1234 chars)")
  • Session-baserad - Använder MSAL tokens från sessionStorage (ej localStorage)
  • Inga externa API:er - Token skickas ENDAST till Azure Management API
  • Secure cleanup - Token nullas efter varje operation (overwrite → null)
  • Auto-cleanup - Token rensas när popup stängs (beforeunload)

2. Input-validering

  • Subscription ID - Valideras mot GUID-format (8-4-4-4-12 hexadecimala tecken)
  • Resource Group - Endast alfanumeriska tecken, bindestreck och understreck
  • App Name - Endast alfanumeriska tecken, bindestreck och understreck
  • Function Names - Valideras mot regex: /^[a-zA-Z0-9-_]+$/

3. XSS-skydd

  • DOM API - Använder document.createElement() och textContent (INTE innerHTML med user data)
  • HTML Escaping - Funktion escapeHtml() finns för framtida användning
  • Ingen eval() - Ingen dynamisk kod-exekvering

4. CSRF-liknande skydd

  • Säkerhetsbekräftelser - Dubbel-check vid bulk operations
  • App Name i dialog - Visar vilken Function App som påverkas
  • URL-validering - Säkerställer att endast portal.azure.com kan trigga extension

5. Permissions (Minsta nödvändiga)

{
  "permissions": ["tabs", "activeTab", "scripting", "storage"],
  "host_permissions": [
    "https://portal.azure.com/*",
    "https://management.azure.com/*"
  ]
}
  • ✅ Endast Azure Portal och Azure Management API
  • ✅ Inga <all_urls> eller wildcard permissions

6. Inga externa dependencies

  • 0 npm packages - 100% vanilla JavaScript
  • Inga CDN:er - Ingen extern kod laddas in
  • Ingen analytics - Ingen data skickas till tredje part

7. Explicit användarsamtycke (Zero Trust)

  • Ingen auto-load - Gör INGA API-anrop när popup öppnas
  • Explicit knapp - Användaren MÅSTE klicka "Ladda funktioner" först
  • ✅ *Parsa URL från Azure Portal (ingen nätverkstrafik)
  1. ✅ Läsa tokens från sessionStorage (endast när du klickar "Ladda funktioner")
  2. ✅ Uppdatera Function App settings (samma behörigheter som din Azure-användare)
  3. ✅ Lista dina funktioner (READ access - efter explicit tillåtelse

8. CSRF & Request Integrity

  • Unique Request IDs - x-ms-client-request-id: crypto.randomUUID()
  • Conditional updates - If-Match: * header för att förhindra race conditions
  • Azure-only endpoints - CSP begränsar connect-src till Azure domäner

⚠️ Säkerhetsöverväganden

Vad extensionen KAN göra:

  1. ✅ Läsa tokens från Azure Portal session (endast när du är inloggad)
  2. ✅ Uppdatera Function App settings (samma behörigheter som din Azure-användare)
  3. ✅ Lista dina funktioner (READ access)

Göra API-anrop automatiskt (kräver klick på "Ladda funktioner")

  • ❌ Vad extensionen INTE KAN göra:
  • ❌ Komma åt andra tabs eller webbplatser
  • ❌ Läsa känslig data från andra appar
  • ❌ Skicka data till externa servrar
  • ❌ Utföra åtgärder utan din bekräftelse (vid bulk operations)
  • ❌ Fungera om du inte är inloggad i Azure Portal

🔐 Best Practices

För användare:

  1. Verifiera alltid Function App namn innan bulk operations
  2. Logga ut från Azure Portal när du inte använder det
  3. Granska ändringar i Azure Portal efter bulk updates
  4. Använd test-miljöer först innan produktion

För utvecklare:

  1. Aldrig logga tokens - Använd endast längd eller substring
  2. Validera alla inputs - Regex-validering av namn och ID:n
  3. Använd DOM API - INTE innerHTML med user-generated content
  4. Minsta permissions - Be endast om vad som behövs
  5. Background worker - Håll långvariga operationer borta från popup

🛡️ Threat Model

Identifierade hot & mitigation:

| Hot | Risk | Mitigation | |---Token in memory** | 🟡 MEDEL | ✅ Fixat - Overwrite + null efter ops | | Auto-execution | 🟡 MEDEL | ✅ Fixat - Explicit "Ladda funktioner" knapp | | XSS via function names | 🟡 MEDEL | ✅ Fixat - DOM API + validering | | URL injection | 🟡 MEDEL | ✅ Fixat - Regex-validering | | Fel Function App uppdateras | 🟡 MEDEL | ✅ Fixat - Bekräftelsedialog | | Malicious npm package | 🔴 HÖG | ✅ N/A - Inga dependencies | | CSRF attack | 🟡 MEDEL | ✅ Fixat - Unique request ID | Fel Function App uppdateras | 🟡 MEDEL | ✅ Fixat - Bekräftelsedialog | | Malicious npm package | 🔴 HÖG | ✅ N/A - Inga dependencies | | MITM attack | 🟢 LÅG | ✅ HTTPS-only, Azure's TLS | | **ObTokens nullas säkert efter varje operation

  • Auto-cleanup när popup stängs (beforeunload)
  • INGA API-anrop vid popup open (explicit "Ladda funktioner" knapp)
  • All user input valideras med regex
  • Inga external dependencies (npm/CDN)
  • Endast nödvändiga permissions
  • Content Security Policy (CSP) aktiverad
  • HTTPS-only kommunikation
  • Bekräftelser vid kritiska operationer
  • DOM API används (inte innerHTML)
  • Background worker för långvariga tasks
  • CSRF-skydd (unique request IDs)
  • Felhantering utan känslig data
  • Minimal attack surface
  • Zero Trust - explicit användarsamtycke för alla åtgärderon
  • Bekräftelser vid kritiska operationer
  • DOM API används (inte innerHTML)
  • Background worker för långvariga tasks
  • Felhantering utan känslig data
  • Minimal attack surface

🚨 Rapportera säkerhetsproblem

Om du hittar ett säkerhetsproblem:

  1. Använd INTE extensionen för produktion tills det är fixat
  2. Dokumentera: Steg för att reproducera
  3. Skicka rapport direkt till utvecklaren
  4. Inkludera INTE tokens eller känslig data i rapporten

Senast uppdaterad: 2026-01-20
Version: 1.0.0
Säkerhetsnivå: ⭐⭐⭐⭐⭐ (5/5)

There aren't any published security advisories