OWASP 10 Teratas untuk aplikasi agen: apa yang perlu diubah oleh pengembang API
Daftar 10 teratas aplikasi agen OWASP berisiko kehilangan keamanan API Anda yang ada. Lima perbaikan yang dapat dikirimkan pengembang API minggu ini, dengan kode.
API Anda memiliki pembatasan laju, pemeriksaan BOLA, dan validasi masukan. Agen AI melewati ketiganya merangkai enam titik akhir resmi ke jalur eskalasi hak istimewa yang tidak pernah dipertimbangkan oleh model ancaman Anda. 520 insiden penyalahgunaan alat pada pelaporan awal tahun 2026 menegaskan bahwa hal ini tidak bersifat teoretis.
OWASP merilis 10 Aplikasi Agen Teratas pada tahun 2026, yang dibuat oleh 100+ peneliti keamanan dari Cisco, Microsoft, Google, dan komunitas yang lebih luas. Daftar ini menargetkan ancaman baru: otonom Agen AI yang memanggil API Anda, menyimpan memori, dan mengambil keputusan tanpa persetujuan manusia.
Yang asli 10 Teratas Keamanan API OWASP berasumsi manusia mengklik tombol dan memicu satu permintaan. Daftar agen mengasumsikan mesin menjalankan 50 permintaan dalam sebuah rantai, masing-masing diinformasikan oleh respons sebelumnya, tanpa ada manusia dalam lingkaran tersebut. API yang sama, berbeda profil penyerang.
Panduan ini mencakup lima risiko agen OWASP yang dapat diperbaiki oleh pengembang API di lapisan API kode kerja yang dapat Anda kirimkan minggu ini.
Lapisan tindakan agen: mengapa API Anda menjadi permukaan serangan
API telah berkembang menjadi apa yang sekarang disebut oleh para peneliti keamanan sebagai "lapisan tindakan agen". Setiap alat an Agen AI menggunakan, baik memesan inventaris, menanyakan database, atau mengirim pemberitahuan, memetakan ke panggilan API. Agen tidak berinteraksi dengan UI. Ia membaca spesifikasi OpenAPI Anda, menemukan titik akhir, dan memanggil mereka secara berurutan.
48,9% organisasi tidak memiliki visibilitas terhadap lalu lintas mesin-ke-mesin. Itu berarti setengah dari seluruh API infrastruktur tidak dapat membedakan pengguna manusia dari agen otonom. Jika Anda tidak bisa mengatakannya perbedaannya, Anda tidak dapat menerapkan aturan yang berbeda.
10 Besar Agen OWASP mencakup: Agensi Berlebihan, Injeksi Cepat, Kerentanan Rantai Pasokan, Keracunan Memori, Penyalahgunaan Alat dan Peningkatan Hak Istimewa, Kegagalan Bertingkat, Penanganan Output yang Tidak Aman, Logging Tidak Memadai, Kebocoran Data, dan Sandboxing Tidak Memadai. Panduan ini berfokus pada lima risiko Anda memperbaikinya di lapisan API.
1. Agensi yang berlebihan: agen memanggil titik akhir yang seharusnya tidak mereka lakukan
Agen dukungan pelanggan perlu membaca status pesanan. Anda memberinya kunci API dengan akses ke seluruh file Anda API. Agen menemukan bahwa mereka juga dapat membatalkan pesanan, mengeluarkan pengembalian dana, dan menghapus akun. Berlebihan agensi berarti agen memiliki izin di luar tugasnya.
Ini adalah agen yang setara dengan OWASP API5 (otorisasi tingkat fungsi rusak), tetapi serangannya vektornya berbeda. Penyerang manusia menemukan titik akhir admin melalui kode sumber atau tebakan URL. Agen menemukannya melalui spesifikasi OpenAPI atau manifes alat Anda. Agen tidak perlu menebak-nebak; Anda menyerahkan menu lengkapnya.
Perbaikan: cakupan kunci API dan daftar titik akhir yang diizinkan
Buat satu kunci API per agen. Setiap kunci dipetakan ke daftar eksplisit titik akhir yang diizinkan. Tolak apa pun permintaan di luar daftar itu.
// Scoped API key configuration per agent
const agentPermissions = {
"agent-order-bot": {
allowedEndpoints: [
"GET /api/orders/:id",
"GET /api/orders/:id/status"
],
rateLimit: { requests: 20, windowSeconds: 60 },
maxChainDepth: 3
},
"agent-support-bot": {
allowedEndpoints: [
"GET /api/orders/:id",
"POST /api/tickets",
"GET /api/tickets/:id"
],
rateLimit: { requests: 10, windowSeconds: 60 },
maxChainDepth: 5
}
};
// Middleware: check agent scope before processing
function enforceAgentScope(req, res, next) {
const agentId = req.headers["x-agent-id"];
const permissions = agentPermissions[agentId];
if (!permissions) {
return res.status(403).json({ error: "Unknown agent" });
}
const route = \`\${req.method} \${req.route.path}\
Untuk memverifikasi bahwa JWT agen memiliki cakupan yang benar sebelum diproses, periksa klaim token.
Itu /v1/jwt/decode titik akhir menerjemahkan JWT apa pun tanpa memerlukan kunci penandatanganan, sehingga Anda bisa
mengaudit konten token selama pengembangan dan dalam saluran CI Anda:
curl -s -X POST https://api.botoi.com/v1/jwt/decode \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ2VudC1vcmRlci1ib3QiLCJzY29wZSI6Im9yZGVycy5yZWFkIiwiaWF0IjoxNzQ5NTY0ODAwLCJleHAiOjE3NDk1NjgwMDB9.signature"
}'
Tanggapan:
{
"success": true,
"data": {
"header": {
"alg": "RS256",
"typ": "JWT"
},
"payload": {
"sub": "agent-order-bot",
"scope": "orders.read",
"iat": 1749564800,
"exp": 1749568000
}
}
}
Itu scope klaim mengatakan orders.read. Jika agen ini menelepon
POST /api/orders/:id/cancel, middleware Anda harus menolak permintaan tersebut sebelum mencapainya
pawangmu.
2. Penyalahgunaan alat dan peningkatan hak istimewa: agen yang merangkai panggilan API
Penyalahgunaan alat mencatat 520 insiden pada pelaporan awal, menjadikannya ancaman agen yang paling umum. Itu pola: agen memanggil titik akhir A, mengekstrak data dari respons, lalu menggunakan data tersebut untuk memanggil titik akhir B dengan cara yang tidak pernah diantisipasi oleh pengembang.
Contoh: Agen integrasi Stripe memiliki akses ke GET /api/customers/:id
Dan POST /api/refunds. Agen membaca riwayat pembayaran pelanggan, mengidentifikasi
transaksi bernilai tertinggi, dan mengeluarkan pengembalian dana untuk dirinya sendiri. Setiap panggilan individu melewati otorisasi.
Rantai adalah eksploitasinya.
Solusi: batas tarif per agen dan pelacakan kedalaman rantai
Pembatasan tarif standar menghitung permintaan per IP atau per kunci API. Pembatasan tarif agen menambahkan dua dimensi:
- Batasan per alat: Batasi berapa kali satu agen dapat memanggil titik akhir tertentu dalam satu jendela
- Batas kedalaman rantai: Lacak berapa banyak panggilan API berurutan yang dilakukan agen dalam satu sesi dan hentikan pada ambang batas yang ditentukan
| Jenis batas tarif | Apa yang ditangkapnya | Siapa yang membutuhkannya |
|---|---|---|
| Per-IP | DDoS, isian kredensial | Setiap API |
| Per-kunci API | Konsumen individu yang kasar | Setiap API |
| Per-agen-per-alat | Agen memanggil satu titik akhir dalam satu lingkaran | API yang dikonsumsi oleh agen |
| Kedalaman rantai | Peningkatan hak istimewa multi-langkah | API yang dikonsumsi oleh agen |
Mewajibkan agen untuk mengirim X-Agent-Session tajuk. Lacak jumlah panggilan per sesi. Ketika
hitungan melebihi ambang batas Anda, kembalikan 429 dengan pesan kesalahan yang jelas.
3. Pencatatan log tidak memadai: tidak ada visibilitas terhadap panggilan API agen
48,9% organisasi tidak mengetahui lalu lintas mesin-ke-mesin. Saat agen mengeksploitasi API Anda, Anda perlu menjawab: agen yang mana? Titik akhir yang mana? Dalam urutan apa? Pada jendela jam berapa? Log akses standar tampilkan alamat IP dan stempel waktu. Mereka tidak menunjukkan identitas agen atau urutan panggilan.
Daftar agen OWASP menandai pencatatan log yang tidak memadai sebagai risiko utama karena serangan agen terlihat seperti itu lalu lintas resmi. Setiap permintaan individu melewati autentikasi. Eksploitasinya hidup dalam pola yang melintang beberapa permintaan.
Perbaiki: memerlukan header atribusi dan mencatat rantai panggilan
Tambahkan tiga header yang diperlukan untuk konsumen agen:
X-Agent-ID: pengidentifikasi unik untuk agen (terkait dengan kunci API-nya)X-Agent-Session: pengidentifikasi untuk tugas atau percakapan saat iniUser-Agent: kerangka kerja dan versi agen (mis.,LangChain/0.3.1)
// Middleware: log every agent request with attribution
function agentAuditLog(req, res, next) {
const logEntry = {
timestamp: new Date().toISOString(),
agentId: req.headers["x-agent-id"] || "unknown",
apiKey: req.headers["x-api-key"]?.slice(-8) || "none",
method: req.method,
path: req.path,
sessionId: req.headers["x-agent-session"] || "none",
ip: req.ip,
userAgent: req.headers["user-agent"]
};
// Structured JSON log for your SIEM
console.log(JSON.stringify(logEntry));
// Track chain depth per session
const session = req.headers["x-agent-session"];
if (session) {
const depth = chainTracker.increment(session);
if (depth > MAX_CHAIN_DEPTH) {
return res.status(429).json({
error: "Agent chain depth exceeded",
maxDepth: MAX_CHAIN_DEPTH,
currentDepth: depth
});
}
}
next();
}
Middleware ini mencatat setiap permintaan sebagai JSON terstruktur, yang dimasukkan ke dalam SIEM atau agregator log apa pun.
Ini juga menerapkan kedalaman rantai dengan melacak panggilan berurutan per sesi. Saat Anda menyelidiki suatu kejadian,
Anda dapat merekonstruksi rantai penuh dengan memfilter sessionId.
4. Penanganan keluaran tidak aman: agen mempercayai respons API tanpa validasi
Agen memanggil API Anda, menerima respons JSON, dan meneruskannya ke langkah berikutnya dalam rangkaiannya. Jika respons berisi bidang yang tidak diharapkan, jenis yang salah, atau konten yang dimasukkan, agen akan menyebarkan masalah hilir. Ini setara dengan OWASP API10 (konsumsi API yang tidak aman), yang diperkuat oleh fakta bahwa agen memproses tanggapan secara otomatis tanpa tinjauan manusia.
Contoh: Pesaing mengkompromikan API penetapan harga pihak ketiga. Agen mengambil produk
harga, menerima respon dengan dimanipulasi price bidang diatur ke 0,01, dan melakukan pemesanan
dengan harga itu. Tidak ada manusia yang pernah melihat tanggapannya.
Perbaiki: validasi setiap respons terhadap Skema JSON
Mulailah dengan membuat skema dari respons yang diketahui baik. Itu /v1/schema/json-to-jsonschema
titik akhir menghasilkan Skema JSON dari sampel JSON apa pun:
curl -s -X POST https://api.botoi.com/v1/schema/json-to-jsonschema \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"json": {
"orderId": "ord_12345",
"status": "shipped",
"total": 49.99,
"items": [
{ "sku": "WIDGET-A", "quantity": 2 }
]
}
}'
Tanggapan:
{
"success": true,
"data": {
"schema": {
"type": "object",
"properties": {
"orderId": { "type": "string" },
"status": { "type": "string" },
"total": { "type": "number" },
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sku": { "type": "string" },
"quantity": { "type": "integer" }
}
}
}
}
}
}
}
Kemudian validasi setiap respons yang diterima agen Anda terhadap skema tersebut. Itu /v1/schema/validate
titik akhir memeriksa objek JSON terhadap Skema JSON apa pun dan mengembalikan kesalahan tertentu:
curl -s -X POST https://api.botoi.com/v1/schema/validate \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"schema": {
"type": "object",
"required": ["orderId", "status", "total"],
"properties": {
"orderId": { "type": "string" },
"status": { "type": "string", "enum": ["pending", "shipped", "delivered"] },
"total": { "type": "number", "minimum": 0 }
},
"additionalProperties": false
},
"data": {
"orderId": "ord_12345",
"status": "shipped",
"total": 49.99,
"internalNote": "rush order"
}
}'
Tanggapan:
{
"success": true,
"data": {
"valid": false,
"errors": [
{
"path": "",
"message": "must NOT have additional properties: internalNote"
}
]
}
}
Validasi tertangkap internalNote, bidang yang tidak termasuk dalam respons. Jika API
mulai mengembalikan bidang yang tidak terduga, agen Anda berhenti memproses alih-alih meneruskan data yang tercemar ke hilir.
Berikut pola lengkap menggunakan Botoi Node.js SDK:
import Botoi from "botoi";
const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });
// Step 1: generate a schema from a known-good response
const schemaResult = await botoi.schema.jsonToJsonschema({
json: knownGoodResponse
});
const responseSchema = schemaResult.data.schema;
// Step 2: validate every agent-received response against that schema
async function validateAgentResponse(response) {
const validation = await botoi.schema.validate({
schema: responseSchema,
data: response
});
if (!validation.data.valid) {
console.error("Response failed validation:", validation.data.errors);
throw new Error("Untrusted response rejected by schema validation");
}
return response;
}
5. Kerentanan rantai pasokan: definisi alat yang dikompromikan
Agen AI menemukan alat melalui server MCP, spesifikasi OpenAPI, dan manifes alat. Jika penyerang memodifikasi definisi alat, agen memanggil titik akhir yang berbeda, mengirimkan data ke server yang berbeda, atau mengeksekusi dengan parameter berbeda dari yang diinginkan pengembang.
Contoh: Anda menggunakan server MCP sumber terbuka yang mendefinisikan 30 alat. Seorang penyerang mengajukan
permintaan tarik yang mengubah URL API salah satu alat api.stripe.com ke
api.str1pe.com. Perubahan lolos peninjauan kode karena hanya berupa karakter tunggal. Agen Anda
sekarang mengirimkan data pembayaran ke server penyerang.
Perbaiki: definisi alat hash dan verifikasi saat runtime
Hash setiap definisi alat pada waktu penerapan. Sebelum agen Anda mendaftarkan alat pada waktu proses, lakukan hashing lagi
dan bandingkan. Itu /v1/hash titik akhir menghasilkan hash SHA-256 dari string apa pun:
curl -s -X POST https://api.botoi.com/v1/hash \\
-H "Content-Type: application/json" \\
-H "X-API-Key: YOUR_API_KEY" \\
-d '{
"text": "{\\"name\\":\\"get_order_status\\",\\"description\\":\\"Retrieve current order status by order ID\\",\\"parameters\\":{\\"orderId\\":\\"string\\"}}",
"algorithm": "sha256"
}'
Tanggapan:
{
"success": true,
"data": {
"hash": "a3f2b8c1d4e5f67890abcdef1234567890abcdef1234567890abcdef12345678",
"algorithm": "sha256"
}
}
Berikut alur kerja pemeriksaan integritas penuh menggunakan Botoi SDK:
import Botoi from "botoi";
import fs from "fs";
const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });
// Hash every tool definition at deploy time
const toolDefs = JSON.parse(fs.readFileSync("./mcp-tools.json", "utf-8"));
const hashes = {};
for (const tool of toolDefs) {
const result = await botoi.hash.sha256({
text: JSON.stringify(tool)
});
hashes[tool.name] = result.data.hash;
}
fs.writeFileSync("./tool-hashes.json", JSON.stringify(hashes, null, 2));
// At runtime, verify before registering any tool
async function verifyToolIntegrity(tool) {
const result = await botoi.hash.sha256({
text: JSON.stringify(tool)
});
const expected = hashes[tool.name];
if (result.data.hash !== expected) {
throw new Error(
\`Tool "\${tool.name}" failed integrity check. \\n\` +
\`Expected: \${expected}\\n\` +
\`Got: \${result.data.hash}\`
);
}
}
Jalankan langkah pembuatan hash di alur CI Anda. Simpan file hash bersama penerapan Anda artefak. Saat runtime, setiap alat diverifikasi sebelum pendaftaran. Satu karakter yang berubah dalam hal apa pun definisi alat memicu kegagalan besar.
10 teratas agen OWASP vs 10 teratas Keamanan API: perbandingan
Kedua daftar tersebut saling melengkapi. Berikut cara lima risiko agen dipetakan ke Keamanan API terdekatnya rekanan dan perubahan apa:
| Risiko agenik | Risiko Keamanan API terdekat | Perubahan apa yang terjadi pada agen |
|---|---|---|
| Agensi yang Berlebihan | Auth Fungsi Rusak API5 | Agen menemukan semua titik akhir dari spesifikasi; kunci cakupan per agen |
| Penyalahgunaan Alat | Konsumsi Sumber Daya API4 | Panggilan berantai agen untuk meningkat; tambahkan batas kedalaman rantai |
| Pencatatan Tidak Memadai | Tidak ada padanan langsung | Panggilan agen terlihat seperti lalu lintas resmi; tambahkan header atribusi |
| Keluaran Tidak Aman | API10 Konsumsi Tidak Aman | Agen memproses tanggapan tanpa tinjauan manusia; tambahkan validasi skema |
| Rantai Pasokan | Tidak ada padanan langsung | Alat yang disusupi menghilangkan lalu lintas agen pengalihan; tambahkan hash integritas |
Daftar periksa pengiriman: lima perbaikan untuk keamanan API agen
Setiap perbaikan bersifat independen. Pilih satu, kirimkan, lanjutkan ke yang berikutnya.
| Memperbaiki | Apa yang harus dilakukan | Titik akhir Botoi |
|---|---|---|
| Kunci API tercakup | Satu kunci per agen; titik akhir daftar yang diizinkan per kunci | /v1/jwt/decode |
| Batas tarif per agen | Lacak kedalaman rantai per alat dan per sesi | |
| Header atribusi | Memerlukan X-Agent-ID, X-Agent-Session; log JSON terstruktur | |
| Validasi respons | Hasilkan skema dari respons yang baik; memvalidasi semua respons agen | /v1/schema/validate, /v1/schema/json-to-jsonschema |
| Integritas alat | Defisit alat hash saat diterapkan; verifikasi saat runtime | /v1/hash |
Apa yang terjadi selanjutnya
10 Teratas OWASP untuk Aplikasi Agenik selengkapnya ada di owasp.org. Cisco, Microsoft, dan Google semuanya mengumumkan inisiatif keamanan agen di RSAC 2026, seperti yang diharapkan perkakas dan standar untuk bergerak cepat sepanjang sisa tahun ini.
Lima risiko yang tersisa dalam daftar (Prompt Injection, Memory Poisoning, Cascading Failures, Data Kebocoran, dan Sandboxing yang Tidak Memadai) memerlukan perbaikan pada lapisan kerangka agen, bukan pada lapisan API. Jika Anda menjalankan kerangka agen, baca dokumen OWASP selengkapnya. Jika Anda menjalankan API, lima perbaikan di atas adalah titik awal Anda.
Mulailah dengan kunci API yang dicakup. Perubahan tunggal tersebut menghalangi sebagian besar tindakan berlebihan dan penyalahgunaan alat skenario. Kemudian tambahkan header atribusi sehingga Anda dapat melihat apa yang dilakukan agen Anda. Sisanya mengikuti dari visibilitas.
FAQ
- Apa perbedaan 10 Besar Aplikasi Agen OWASP dengan 10 Besar Keamanan API OWASP?
- API Security Top 10 (2023) mengatasi risiko dari konsumen manusia: otorisasi yang rusak, kelemahan autentikasi, paparan data yang berlebihan. 10 Aplikasi Agen Teratas (2026) mengatasi risiko dari agen AI otonom yang menyambungkan panggilan API, menyimpan memori di seluruh sesi, dan membuat keputusan tanpa pengawasan manusia. Kedua daftar tersebut berlaku untuk API, namun daftar agen menargetkan pola mesin-ke-mesin yang tidak pernah diantisipasi sebelumnya.
- Apa yang dimaksud dengan keagenan berlebihan dalam aplikasi agen?
- Agensi yang berlebihan terjadi ketika agen AI memiliki akses ke titik akhir API atau tindakan di luar tugas yang diperlukan. Misalnya, agen dukungan pelanggan dengan akses ke titik akhir penagihan, pengembalian dana, dan penghapusan akun dapat menyambungkan panggilan tersebut untuk meningkatkan lebih dari sekadar menjawab pertanyaan. Perbaikannya adalah cakupan kunci API yang membatasi setiap agen ke titik akhir tepat yang dibutuhkannya.
- Apakah saya perlu membangun kembali API saya untuk keamanan agen?
- Tidak. Anda tidak perlu membangun kembali. Lima perbaikan yang tercakup dalam panduan ini, kunci API tercakup, batas kapasitas per alat, header atribusi permintaan, validasi skema respons, dan pemeriksaan integritas definisi alat, merupakan tambahan pada API Anda yang sudah ada. Anda dapat mengirimkan masing-masing secara mandiri.
- Mengapa penyalahgunaan alat merupakan ancaman aplikasi agen yang paling umum?
- Penyalahgunaan alat dan peningkatan hak istimewa mencatat 520 insiden dalam pelaporan awal karena agen menghubungkan panggilan API dengan cara yang tidak pernah diinginkan oleh pengembang. Agen tunggal dapat memanggil titik akhir baca, mengurai respons, lalu memanggil titik akhir tulis menggunakan data dari panggilan pertama untuk meningkatkan hak istimewa. Kebanyakan API tidak memiliki mekanisme untuk mendeteksi atau memblokir rantai multi-langkah dari satu sesi agen.
- Bagaimana cara mengatribusikan permintaan API ke agen AI tertentu?
- Tambahkan header X-Agent-ID yang diperlukan ke API Anda. Setiap agen mendapatkan pengidentifikasi unik yang terkait dengan kunci API cakupannya. Catat kunci API dan ID agen pada setiap permintaan. Ini memberi Anda jejak audit lengkap tentang agen mana yang memanggil titik akhir mana, kapan, dan dalam urutan apa.
Mulai membangun dengan botoi
150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.