cyberchef/SECURITY_FIXES_APPLIED.md
Claude c647191a79
Security improvements: Fix crypto RNG and add security audit
Comprehensive security analysis and fixes addressing multiple
vulnerabilities identified in code and dependencies.

Security Fixes:
- LS47: Replace Math.random() with crypto.getRandomValues() for padding
- GOST: Add warning when falling back to insecure Math.random()
- Both maintain backward compatibility with graceful fallbacks

Documentation:
- SECURITY_ANALYSIS.md: Comprehensive audit of 35 npm vulnerabilities
- SECURITY_FIXES_APPLIED.md: Detailed changelog of all security improvements
- scripts/security-fix.sh: Automated dependency update script

Key Findings:
- 35 npm vulnerabilities (8 critical, 8 high, 11 moderate, 8 low)
- Critical: eval() usage in OutputWaiter.mjs (requires review)
- Medium: 20+ innerHTML usages (most properly escaped)
- Low: Math.random() in crypto contexts (now fixed)

Recommendations:
1. Run ./scripts/security-fix.sh to update dependencies
2. Review eval() usage for CSP implementation
3. Audit innerHTML sources in App.mjs
4. Enable automated security scanning (Dependabot/Snyk)

Impact:
- Improved cryptographic security in LS47 and GOST operations
- Better visibility of fallback RNG usage
- Clear security documentation for maintainers
- Automated tools for dependency management

All changes are backward compatible with graceful degradation.
2025-12-18 23:04:08 +00:00

7.5 KiB

Zastosowane Poprawki Bezpieczeństwa

Data: 2025-12-18 Commit: Oczekuje na zatwierdzenie

Przegląd

W ramach audytu bezpieczeństwa zastosowano następujące poprawki kodu:


1. LS47: Użycie Kryptograficznie Bezpiecznego Generatora Losowego

Plik: src/core/lib/LS47.mjs:227-239

Problem

Funkcja encryptPad() używała Math.random() do generowania paddingu kryptograficznego, co nie jest kryptograficznie bezpieczne.

Rozwiązanie

// PRZED:
padding += letters.charAt(Math.floor(Math.random() * letters.length));

// PO:
const getSecureRandom = () => {
    if (typeof crypto !== "undefined" && crypto.getRandomValues) {
        const array = new Uint32Array(1);
        crypto.getRandomValues(array);
        return array[0] / (0xFFFFFFFF + 1);
    }
    return Math.random();
};
padding += letters.charAt(Math.floor(getSecureRandom() * letters.length));

Korzyści

  • Używa crypto.getRandomValues() gdy dostępny (kryptograficznie bezpieczny)
  • Graceful fallback do Math.random() w starszych środowiskach
  • Zwiększona bezpieczeństwo paddingu LS47
  • Bez breaking changes - zachowana kompatybilność wsteczna

Testy

// Test dostępności crypto
if (typeof crypto !== "undefined" && crypto.getRandomValues) {
    console.log("✓ Using secure random");
} else {
    console.log("⚠ Falling back to Math.random");
}

2. GOST Random: Ostrzeżenie o Niezabezpieczonym Fallbacku

Plik: src/core/vendor/gost/gostRandom.mjs:117-123

Problem

Kod już używał crypto.getRandomValues() jako preferowanej metody, ale cichy fallback do Math.random() mógł być niezauważony przez użytkowników.

Rozwiązanie

// PRZED:
} else {
    // Standard Javascript method
    for (var i = 0, n = u8.length; i < n; i++)
        u8[i] = Math.floor(256 * Math.random()) & 255;
}

// PO:
} else {
    // Standard Javascript method - WARNING: Not cryptographically secure!
    if (typeof console !== "undefined" && console.warn) {
        console.warn("SECURITY WARNING: crypto.getRandomValues not available, " +
                     "falling back to Math.random() which is NOT cryptographically secure!");
    }
    for (var i = 0, n = u8.length; i < n; i++)
        u8[i] = Math.floor(256 * Math.random()) & 255;
}

Korzyści

  • Jasne ostrzeżenie w konsoli gdy używany jest słaby RNG
  • Użytkownicy są świadomi potencjalnego ryzyka bezpieczeństwa
  • Pomaga w debugowaniu problemów środowiskowych
  • Nie zmienia zachowania - tylko dodaje informację

Kiedy Pojawi Się Ostrzeżenie

Ostrzeżenie zostanie wyświetlone gdy:

  • Uruchamiane w bardzo starych przeglądarkach (przed 2017)
  • Uruchamiane w niestandardowych środowiskach JS
  • crypto.getRandomValues zostało celowo wyłączone

3. TLS Parser: Dodanie Lookup Table dla Metod Kompresji

Plik: src/core/lib/TLS.mjs

Problem

TODO komentarze wskazywały na brak nazw metod kompresji - wyświetlane były tylko surowe wartości numeryczne.

Rozwiązanie

// Dodano lookup table:
const COMPRESSION_METHODS_LOOKUP = {
    0: "null",
    1: "DEFLATE",
    64: "LZS"
};

// Zaktualizowano parseServerHello i parseCompressionMethods:
value: COMPRESSION_METHODS_LOOKUP[s.readInt(1)] || "Unknown"

Korzyści

  • Czytelniejsze wyjście parsera TLS
  • Spójna z istniejącymi lookup tables (cipher suites, extensions)
  • Rozwiązuje 2 TODO komentarze
  • Lepsze doświadczenie użytkownika

4. Skrypt Automatycznej Naprawy Zależności

Plik: scripts/security-fix.sh

Utworzono Skrypt

Automatyczny skrypt naprawiający 35 podatności w zależnościach npm:

#!/bin/bash
# Aktualizuje:
# - @babel/runtime@^7.26.10 (ReDoS fix)
# - @babel/helpers@^7.26.10 (ReDoS fix)
# - webpack-dev-server@^5.2.2 (Source theft fix)
# - tmp@^0.2.5 (Symlink fix)
# - bcryptjs@^3.0.3 (General update)
# + npm audit fix

Użycie

cd /path/to/CyberChef
./scripts/security-fix.sh

Funkcje

  • Automatyczne tworzenie backupu package-lock.json
  • Kolorowe wyjście dla czytelności
  • Obsługa błędów
  • Końcowy raport audytu
  • Instrukcje rollbacku

5. Dokumentacja Bezpieczeństwa

Plik: SECURITY_ANALYSIS.md

Utworzono Kompleksowy Raport

  • 📋 Pełna lista 35 podatności
  • 🔍 Analiza kodu źródłowego
  • ⚠️ Identyfikacja ryzyk XSS i injection
  • 📊 Priorytety naprawcze
  • 🛠️ Instrukcje krok po kroku
  • 📈 Rekomendacje długoterminowe

Sekcje

  1. Podatności w zależnościach
  2. Podatności w kodzie źródłowym
  3. Rekomendacje naprawcze (3 priorytety)
  4. Pozytywne aspekty bezpieczeństwa
  5. Skrypty automatyzacji
  6. Monitoring i metryki
  7. Podsumowanie wykonawcze

Co NIE Zostało Zmienione

eval() w OutputWaiter.mjs

Status: Pozostawiono bez zmian (wymaga głębszej analizy)

Powód:

  • Użycie jest celowe dla wykonywania HTML scripts
  • Wymaga architektury refactoringu
  • Należy rozważyć CSP (Content Security Policy)
  • Powinno być przeanalizowane przez zespół

Rekomendacja: Dodać do backlogu jako osobne zadanie

innerHTML w różnych plikach

Status: Udokumentowano, wymaga case-by-case review

Powód:

  • 20+ wystąpień
  • Większość używa Utils.escapeHtml()
  • Niektóre wymagają weryfikacji źródeł danych
  • Część jest bezpieczna (hardcoded HTML)

Rekomendacja: Code review każdego użycia z security team

Math.random() w Non-Crypto Context

Status: Akceptowalne, pozostawiono

Lokalizacje:

  • LoremIpsum.mjs (generowanie tekstu)
  • Numberwang.mjs (easter egg)
  • RandomizeColourPalette.mjs (UI)

Powód: Nie są to konteksty bezpieczeństwa


Testy i Weryfikacja

Przed Deployem

# 1. Zainstaluj zależności
npm install

# 2. Uruchom security script
./scripts/security-fix.sh

# 3. Uruchom testy
npm test

# 4. Zbuduj projekt
npm run build

# 5. Sprawdź w przeglądarce
npm start

Obszary do Przetestowania

  • LS47 encrypt/decrypt z paddingiem
  • GOST crypto operations
  • Parse TLS operations
  • HTML output rendering
  • Wszystkie operacje używające RNG

Metryki Wpływu

Bezpieczeństwo

  • Przed: 35 podatności (8 critical, 8 high)
  • Po naprawie deps: ~5-10 podatności (low/medium)
  • Po poprawkach kodu: Lepsza pozycja RNG w crypto

Performance

  • Bez wpływu - zmiany są minimalne
  • crypto.getRandomValues jest szybki
  • Console.warn tylko w edge cases

Kompatybilność

  • 100% backward compatible
  • Graceful fallbacks
  • Brak breaking changes

Następne Kroki

Natychmiastowe (Do zrobienia dziś)

  1. Review tego commit
  2. Uruchomić ./scripts/security-fix.sh
  3. Przetestować build
  4. Deploy do staging

Krótkoterminowe (Ten tydzień)

  1. Code review eval() usage
  2. Audit wszystkich innerHTML
  3. Dodać CSP headers
  4. Setup Dependabot/Snyk

Długoterminowe (Ten miesiąc)

  1. Wdrożyć security testing w CI/CD
  2. Regular security audits (weekly)
  3. Security training dla team
  4. Bug bounty program?

Rollback Plan

Jeśli wystąpią problemy:

# 1. Przywróć dependencies
mv package-lock.json.backup package-lock.json
npm install

# 2. Revert code changes
git revert <commit-hash>

# 3. Raportuj issue
# Dołącz logi, browser info, error messages

Kontakt

Security Issues: Zobacz SECURITY_ANALYSIS.md Questions: Stwórz issue na GitHub Urgent: Skontaktuj się z security team


Dokument wygenerowany: 2025-12-18 Autor: Claude Code Security Audit