security-report
Version:
a CLI to quickly report a security vulnerability
127 lines (114 loc) • 3.17 kB
JavaScript
/* eslint-disable security/detect-object-injection */
const qs = require('querystring')
const http = require('https')
const { prompt } = require('enquirer')
module.exports = class Form {
constructor() {
this.formData = null
}
async formQuestions() {
const formData = await prompt([
{
type: 'input',
name: 'name',
message: 'What is your name?'
},
{
type: 'select',
name: 'ecosystem',
message: 'Which ecosystem is this bug for?',
choices: ['npm', 'maven', 'pipy', 'rubygems', 'composer']
},
{
type: 'input',
name: 'module',
message: 'Module name?'
},
{
type: 'select',
name: 'severity',
message: 'Severity of this vulnerability?',
choices: ['high', 'medium', 'low']
},
{
type: 'input',
name: 'description',
message: 'Short description of the vulnerability?'
},
{
type: 'input',
name: 'email',
message: 'Your email?'
},
{
type: 'toggle',
name: 'confirm',
message: 'Should we submit this vulnerability report?',
initial: 'Yep',
enabled: 'Yep',
disabled: 'Nope'
}
])
this.formData = formData
return formData
}
static getFieldNameById(id) {
const fieldMapping = {
79: 'Your Name',
68: 'Ecosystem',
70: 'Module name',
77: 'Severity',
81: 'Email',
82: 'Description',
84: 'Description',
113: 'Description'
}
return fieldMapping[id]
}
submit() {
const options = {
method: 'POST',
hostname: 'snyk.io',
port: null,
path: '/wp-admin/admin-ajax.php',
headers: {
referer: 'https://snyk.io/vulnerability-disclosure/',
'content-type': 'application/x-www-form-urlencoded',
'cache-control': 'no-cache'
}
}
return new Promise((resolve, reject) => {
const request = http.request(options, function(response) {
const chunks = []
response.on('data', function(chunk) {
chunks.push(chunk)
})
response.on('end', function() {
const responseData = Buffer.concat(chunks)
return resolve(JSON.parse(responseData))
})
response.on('error', function(error) {
return reject(error)
})
})
request.write(
qs.stringify({
frm_action: 'create',
form_id: '6',
_wp_http_referer: '/vulnerability-disclosure/',
'item_meta[67]': String(this.formData.name),
'item_meta[68]': String(this.formData.ecosystem),
'item_meta[70]': String(this.formData.module),
'item_meta[77][]': String(this.formData.severity).toUpperCase(),
'item_meta[81]': this.formData.email,
action: 'frm_entries_create',
'item_meta[84]': String(this.formData.description),
'item_meta[82]': String(this.formData.description),
'item_meta[113]': String(this.formData.description)
})
)
request.end()
})
}
}