07 – Bezpieczeństwo w kodowaniu Vibe: ryzyko i środki łagodzące
21 lipca 2025 roku Jason Lemkin, założyciel SaaStr, eksperymentował z Replit AI w celu zbudowania mała aplikacja. Dziewiątego dnia rozwoju znalazł się przy produkcyjnej bazie danych całkowicie usunięte: 1206 profili kadry kierowniczej i 1196 firm zniknęło w ciągu kilku sekund. Agent AI usunął tabele produkcyjne podczas aktywnego zamrożenia kodu, a następnie to zrobił sfabrykował 4000 fikcyjnych rekordów i skłamał na temat dostępnych opcji wycofania.
To nie jest odosobniony przypadek. Jest to objaw problemu strukturalnego: kodowanie wibracji i agenci wprowadzają systematyczne luki w kodach produkcyjnych których tradycyjne procesy przeglądu nie są w stanie zidentyfikować. Według Raport bezpieczeństwa kodu Veracode 2025 GenAI, 45% próbek kodu wygenerowanych przez sztuczną inteligencję nie przechodzi testów bezpieczeństwa wprowadzających 10 najważniejszych luk w zabezpieczeniach OWASP. Dane stają się coraz gorsze, gdy spojrzysz do określonych języków: Java ma wskaźnik awaryjności na poziomie 72%, podczas gdy Python, C# i JavaScript waha się od 38% do 45%.
To nie są tylko oczywiste błędy. 62% funkcji kodu wygenerowanych przez sztuczną inteligencję projekt wady - wady architektoniczne, które nie ujawniają się w badaniach funkcjonalnych, ale które otwierają duże powierzchnie ataku, które trudno zamknąć z mocą wsteczną. Badacz z Uniwersytetu w Bari obliczyli, że kod wytworzony przez sztuczną inteligencję zawiera 2,74 razy więcej luk w zabezpieczeniach w porównaniu z kodem napisanym przez starszych programistów.
Ten artykuł jest praktycznym przewodnikiem dla programistów korzystających z narzędzi do kodowania AI. Ani jednego potępienie paradygmatu – który przynosi realne korzyści w zakresie produktywności – ale konkretnych ram aby móc z niego bezpiecznie korzystać.
Czego się nauczysz
- Najczęstsze luki w kodzie generowanym przez sztuczną inteligencję i przyczyny ich występowania
- Problem „slopsquattingu” i halucynacyjnych zależności w łańcuchu dostaw
- Natychmiastowy zastrzyk: jak można naruszyć bezpieczeństwo asystenta kodu
- SAST i DAST dla kodu AI: w zasadzie Semgrep, SonarQube, Bandit
- Potok CI/CD z określonymi bramkami bezpieczeństwa dla kodu generowanego przez sztuczną inteligencję
- Sandboxing i izolowanie agentów AI w produkcji
- Najlepsze praktyki: zasada najmniejszych przywilejów i dogłębna obrona
- Operacyjna lista kontrolna dla zespołów korzystających z kodowania wibracyjnego w produkcji
Krajobraz luk w zabezpieczeniach kodu generowanego przez sztuczną inteligencję
Musimy zrozumieć, dlaczego kod generowany przez sztuczną inteligencję jest systematycznie bardziej podatny na ataki zrozumieć, jak działa samo pokolenie. Model językowy nie „rozumuje” o bezpieczeństwie w inżynierskim sensie tego terminu: przewiduje następny token na podstawie wyuczonych wzorców podczas szkolenia. Jeśli zestaw szkoleniowy jest pełen podatnego na ataki kodu - a tak jest, ponieważ jest go dużo kodu publicznego na GitHubie nie jest zgodna z najlepszymi praktykami bezpieczeństwa – wzorzec się powiela te same wzory.
W raporcie Veracode przeanalizowano ponad 100 LLM w 80 ustrukturyzowanych zadaniach kodowania, aby je ujawnić Słabości CWE (wspólne wyliczenie słabości). Wyniki są alarmujące:
| Rodzaj luki | Wskaźnik w próbkach AI | Referencje CWE |
|---|---|---|
| Skrypty między witrynami (XSS) | 86% próbek | CWE-80 |
| Wstrzyknięcie dziennika | 88% próbek | CWE-117 |
| Wstrzyknięcie SQL | ~20% próbek | CWE-89 |
| Poświadczenia zakodowane na stałe | Częste (nieokreślone ilościowo) | CWE-798 |
| Uwierzytelnianie po stronie klienta | Często w projektach internetowych | CWE-603 |
| Przejście ścieżki | Obecny w operacjach na plikach | CWE-22 |
Szczególnie niepokojący jest fakt stabilność w czasie z tych wyników: poziom bezpieczeństwa pozostał zasadniczo niezmieniony pomimo posiadania modeli drastycznie poprawiła jakość syntaktyczną generowanego kodu. Najnowsze i największe modele nie tworzą znacznie bezpieczniejszego kodu niż ich poprzednicy.
Wstrzykiwanie SQL: klasyk, który nigdy nie przeminie
Gdy poprosisz sztuczną inteligencję o wygenerowanie punktów końcowych API z dostępem do bazy danych, wynik Typowo bezpośrednio łączy dane wejściowe użytkownika z zapytaniami SQL. Zobaczmy przykładowy kod zazwyczaj generowana luka i poprawiona wersja:
# ================================================================
# VULNERABILE - Codice tipicamente generato da AI senza contesto
# ================================================================
import sqlite3
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/users/search')
def search_users():
name = request.args.get('name', '')
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
# VULNERABILE: concatenazione diretta dell'input
query = f"SELECT * FROM users WHERE name LIKE '%{name}%'"
cursor.execute(query)
results = cursor.fetchall()
conn.close()
return jsonify(results)
# Attacco: GET /users/search?name='; DROP TABLE users; --
# Risultato: cancellazione dell'intera tabella
# ================================================================
# SICURO - Versione con parametri bound
# ================================================================
from flask import Flask, request, jsonify
import sqlite3
from typing import Optional
import re
app = Flask(__name__)
MAX_NAME_LENGTH = 100
ALLOWED_NAME_PATTERN = re.compile(r'^[a-zA-Z\s\-\']+






