Criando uma notificação do Slack quando novas vulnerabilidades são detectados..
Usando a IU do Swagger WebSphere Automation , o construtor Slack Block Kit e a sintaxe Mustache, crie um processo que envie uma notificação para um webhook que resulte em uma mensagem do Slack. A notificação contém os detalhes de qualquer nova vulnerabilidade detectada pelo WebSphere Automation .
Antes de iniciar
Se você planeja implementar variáveis ou processamento condicional, certifique-se de estar familiarizado com a sintaxe do Mustache.
Examinando a notificação de recurso do WebSphere Automation
O resultado esperado deste tutorial é que o Slack exibe mensagens com informações que são transmitidas de notificações de recurso recém-criadas no WebSphere Automation. Para este tutorial, a notificação de recurso contém os detalhes para a criação de um novo registro de vulnerabilidade quando uma nova vulnerabilidade é detectada em um servidor gerenciado Na notificação de recurso de exemplo a seguir, o valor do parâmetro type é create; o objeto criado é um vulnerability.
{
"type": "CREATE",
"vulnerability": {
"id": "70357d34-411d-3321-a60f-ede653897a55",
"name": "6557248 : server1@defected1.example.com",
"description": "Multiple vulnerabilities exist in the Apache Log4j (CVE-2022-23302, CVE-2022-23305, CVE-2022-23307) library used by IBM WebSphere Application Server in the Admin Console and UDDI Registry application. The same Apache library is also used by the IBM WebSphere Application Server Liberty for z/OS in features zosConnect-1.0 and zosConnect-1.2. All vulnerabilities have been addressed previously by removing all existing Apache Log4j versions.",
"assetId": "1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"securityBulletinId": "23c15e59-1ef9-3eb5-a175-0845597cdbc1",
"resolved": false,
"cves": [
{
"id": "CVE-2022-23302",
"description": "Apache Log4j could allow a remote authenticated attacker to execute arbitrary code on the system, caused by an unsafe deserialization in JMSSink. By sending specially-crafted JNDI requests using TopicConnectionFactoryBindingName configuration, an attacker could exploit this vulnerability to execute arbitrary code on the system.",
"cvssBaseScore": 8.8
},
{
"id": "CVE-2022-23305",
"description": "Apache Log4j is vulnerable to SQL injection. A remote attacker could send specially-crafted SQL statements to the JDBCAppender, which could allow the attacker to view, add, modify or delete information in the back-end database.",
"cvssBaseScore": 6.5
},
{
"id": "CVE-2022-23307",
"description": "Apache Log4j could allow a remote attacker to execute arbitrary code on the system, caused by an unsafe deserialization in the in Apache Chainsaw component. By sending specially-crafted input, an attacker could exploit this vulnerability to execute arbitrary code on the system.",
"cvssBaseScore": 9.8
}
],
"remediations": [
{
"startVersion": "9.0.0.0",
"endVersion": "9.0.5.10",
"operator": "OR",
"iFixes": [
"PH42762"
],
"fixPack": "9.0.5.11",
"additionalInstallationInstructions": "https://www.ibm.com/support/pages/node/6557248"
}
],
"links": {
"self": {
"rel": "self",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/vulnerabilities/70357d34-411d-3321-a60f-ede653897a55",
"type": "application/json",
"title": "self"
},
"asset": {
"rel": "related",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/assets/1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"type": "application/json",
"title": "asset"
},
"securityBulletin": {
"rel": "related",
"href": "https://cpd-websphere-automation.apps.wsa-412.example.com/bulletins/23c15e59-1ef9-3eb5-a175-0845597cdbc1",
"type": "application/json",
"title": "securityBulletin"
}
},
"created": "2023-05-17T10:10:29Z",
"createdBy": "vulnerability-manager",
"updated": "2023-05-17T10:10:29Z",
"updatedBy": "vulnerability-manager",
"secondsExposed": 1379
}
}
As informações de interesse incluem os IDs CVE, as pontuações CVSS, o servidor afetado, a descrição da vulnerabilidade e o URL do boletim de segurança.
Definindo o processo e o resultado esperado
O resultado é ter um destino de webhook do Slack recebendo informações sobre novos CVE de alta gravidade e exibir essas informações em uma nova mensagem do Slack.
- Abra um navegador da web para o construtor do Slack Block Kit
https://app.slack.com/block-kit-builder/ - Utilize o construtor Block Kit para construir uma mensagem que exibe texto no formato que você desejar. Essa mensagem do Slack é construída usando o exemplo a seguir:

{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":alert1: WebSphere Automation detected a vulnerability for CVE <https://www.ibm.com/support/pages/node/6525706|CVE-2021-44228> (CVSS base score 10.0) on server *server1* on host *defected1.example.com*." } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "*CVE Information*\nApache Log4j could allow a remote attacker to execute arbitrary code on the system, caused by the failure to protect against attacker controlled LDAP and other JNDI related endpoints by JNDI features. By sending a specially crafted code string, an attacker could exploit this vulnerability to load arbitrary Java code on the server and take complete control of the system. Note: The vulnerability is also called Log4Shell or LogJam." } }, { "type": "divider" }, { "type": "actions", "elements": [ { "type": "button", "text": { "type": "plain_text", "text": "View Bulletin", "emoji": true }, "value": "click_me", "url": "https://www.ibm.com/support/pages/node/6525706" }, { "type": "button", "text": { "type": "plain_text", "text": "View All server1 CVEs", "emoji": true }, "value": "click_me_123", "url": "https://cpd-websphere-automation.example.com/websphereauto/websphere/1a5d141a-3294-3ff3-9182-5ae1d4f3465d/vulnerabilities/cves" } ] } ] } - Após ter a mensagem do Slack estruturada corretamente, é possível substituir variáveis usando a sintaxe Mustache. Faça essas substituições para os parâmetros que você deseja enviar do evento WebSphere Automation .
{ "channel": "<your_Slack_channel>", "blocks": [ { "type": "header", "text": { "type": "plain_text", "text": "Vulnerability Detected" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "{{icon}} WebSphere Automation detected a vulnerability for CVE <{{bulletinUrl}}|{{cveId}}> (CVSS base score {{cvssBaseScore}}) on {{#isJdk}}JDK *{{productName}}*{{/isJdk}}{{^isJdk}}server *{{serverName}}*{{/isJdk}} on host *{{hostName}}*." } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "*CVE Information*\n{{{@wsa_eq_cveSummary}}}" } }, { "type": "actions", "elements": [ { "type": "button", "text": { "type": "plain_text", "text": "View Bulletin" }, "value": "click_me", "url": "{{bulletinUrl}}" }{{^isJdk}}, { "type": "button", "text": { "type": "plain_text", "text": "View All CVEs for {{serverName}}" }, "value": "click_me_123", "url": "https://cpd-websphere-automation.example.com/websphereauto/websphere/{{serverId}}/vulnerabilities/cves" } {{/isJdk}} ] }, { "type": "divider" } ] }
Configurando a ação do webhook
Use a UI do Swagger WebSphere Automation para criar uma ação de webhook. Para obter mais informações, consulte como criar uma ação de webhook.
No parâmetro body , crie uma lista separada por vírgula dos elementos JSON que você criou no Slack Block Kit Builder. Aspas no valor do parâmetro body devem ser escapadas com o caractere de barra invertida. Use a notação Mustache (chaves duplas) para os nomes de variáveis criados.
{
"id": "74313a6b-a163-4f7d-833b-31bf4f12670a",
"name": "Vulnerability Slack Notification Action",
"description": "POSTs a notification to Slack when triggered",
"type": "webhook",
"enabled": true,
"configuration": {
"targetUrl": "https://hooks.slack.com/services/12345/12345/12345",
"method": "POST",
"contentType": "application/json",
"headers": [],
"body": "{ \"channel\": \"<your_Slack_channel>\", \"blocks\": [ { \"type\": \"header\", \"text\": { \"type\": \"plain_text\", \"text\": \"Vulnerability Detected\" } }, { \"type\": \"divider\" }, { \"type\": \"section\", \"text\": { \"type\": \"mrkdwn\", \"text\": \"{{icon}} WebSphere Automation detected a vulnerability for CVE <{{bulletinUrl}}|{{cveId}}> (CVSS base score {{cvssBaseScore}}) on {{#isJdk}}JDK *{{productName}}*{{/isJdk}}{{^isJdk}}server *{{serverName}}*{{/isJdk}} on host *{{hostName}}*.\" } }, { \"type\": \"divider\" }, { \"type\": \"section\", \"text\": { \"type\": \"mrkdwn\", \"text\": \"*CVE Information*\\n{{{@wsa_eq_cveSummary}}}\" } }, { \"type\": \"actions\", \"elements\": [ { \"type\": \"button\", \"text\": { \"type\": \"plain_text\", \"text\": \"View Bulletin\" }, \"value\": \"click_me\", \"url\": \"{{bulletinUrl}}\" }{{^isJdk}}, { \"type\": \"button\", \"text\": { \"type\": \"plain_text\", \"text\": \"View All CVEs for {{serverName}}\" }, \"value\": \"click_me_123\", \"url\": \"https://cpd-websphere-automation.example.com/websphereauto/websphere/{{serverId}}/vulnerabilities/cves\" } {{/isJdk}} ] }, { \"type\": \"divider\" } ] }"
}
}
Testando a ação do webhook
Para testar a ação de webhook, abra a UI do Swagger WebSphere Automation e use o controle PATCH /action/{actionId} para transmitir valores codificados permanentemente para o Slack. Para obter mais informações, consulte Criando uma ação.
Insira o ID de ação no campo de texto actionId . Use o valor actionId que a UI do Swagger designou à ação quando você a criou.
Insira o código JSON a seguir no campo Corpo da solicitação :
{
"operation": "invoke-action",
"variables": {
"hostName": "example.com",
"cveSummary": "Example CVE summary",
"bulletinUrl": "https://www.ibm.com/support/pages/node/6525706",
"cveId": "CVE-2021-44228",
"icon": ":alert1:",
"serverName": "server1",
"cvssBaseScore": "10",
"isJdk": "false",
"serverId": "1a5d141a-3294-3ff3-9182-5ae1d4f3465d",
"productName": "WebSphere Application Server"
}
}
Clique em Executar..
Assegure-se de que o código de resposta do servidor tenha um valor de 200. Uma resposta bem-sucedida também tem"successful": trueno corpo de resposta
Abra o canal Slack e confirme se uma nova mensagem foi criada.
Criando o acionador de recurso
Siga as instruções para criar um gatilho de recurso. Consulte o acionador de recurso de exemplo a seguir
Configure o valor do parâmetro actionId para o ID de ação designado à ação pela IU do Swagger.
Na seção variableMappings , crie variáveis correspondentes àquelas definidas na tabela de ações e incidentes. Para cada variável, crie expressões JSONata que avaliem um booleano https://try.jsonata.org/ ou um valor que você deseja passar para o webhook.
{
"id": "46e65c6e-8c9d-4fe9-90fb-ac5ca2303fae",
"name": "Vulnerability Created Trigger",
"description": "Triggers the Slack Notification action when a vulnerability with a CVE that has a CVSS base score greater than 9 is created.",
"actionId": "<your_Slack_Notification_action_id>",
"type": "resource",
"enabled": true,
"configuration": {
"resourceType": "vulnerability",
"operation": "create"
},
"variableMappings": {
"hostName": "$asset.hostName",
"cveSummary": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); vulnerability.cves[cvssBaseScore = $maxCvssBaseScore][0].description)",
"bulletinUrl": "$bulletin.url",
"cveId": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); vulnerability.cves[cvssBaseScore = $maxCvssBaseScore][0].id)",
"icon": "($maxCvssBaseScore := $max(vulnerability.cves.cvssBaseScore); $maxCvssBaseScore > 0 and $maxCvssBaseScore <= 3.9 ? ':warning:' : ($maxCvssBaseScore >= 4 and $maxCvssBaseScore <= 6.9 ? ':standup_ibm_status_major_warning_orange:' : ($maxCvssBaseScore >= 7 and $maxCvssBaseScore <= 8.9 ? ':ibm-warning-filled:' : ':alert1:')))",
"serverName": "$asset.serverName",
"cvssBaseScore": "$number($max(vulnerability.cves.cvssBaseScore))",
"isJdk": "$asset.type = 'jdk'",
"serverId": "$asset.id",
"productName": "$asset.productName"
}
}
As descrições das várias expressões JSONata são as seguintes.
- cveSummary: A descrição do CVE na notificação de recurso com a pontuação CVSS mais alta.
- cveId: o ID do CVE para o CVE na notificação de recurso com a maior pontuação do CVSS.
- icon: um ícone que é indicativo da urgência do CVE com a pontuação mais alta do CVSS; um símbolo de aviso é exibido para uma pontuação do CVSS de 3.9 ou menos, um aviso principal para 4.0 a 6.9e um alerta para maior que 7.0
- cvssBaseScore: A pontuação CVSS mais alta dos CVEs na notificação de recursos.
As seguintes variáveis usam variáveis de contexto. Para obter mais informações, consulte Recurso de gatilho.
- isJDK: um booleano que será avaliado como
truese o CVE for configurado como afetando o Java Developer Kit. - productName: o nome do produto com a vulnerabilidade.
- servername: o nome do servidor com a vulnerabilidade.
- hostname: o nome do host do tempo de execução com a vulnerabilidade.
- bulletinUrlURL do boletim de segurança da vulnerabilidade.
Ative o acionador de recurso usando a IU do Swagger para executar seu código JSON Para obter mais informações, consulte Criando um gatilho de recurso.