Skip to main content

Business information leak - Power BI

Description

Business information is obtained, such as:

  • Strategic Information
  • KIPS
  • Sales Information
  • Dispatch Information

Impact

  • Obtain strategic business information.
  • Obtain KPI indicators.
  • Obtain sales and dispatches information.

Recommendation

Establish access controls to resources with potentially sensitive information.

Threat

User not authenticated in the application from the Internet.

Expected Remediation Time

⌚ 30 minutes.

Score

Default score using CVSS 3.1. It may change depending on the context of the vulnerability.

Base

  • Attack vector: N
  • Attack complexity: L
  • Privileges required: N
  • User interaction: N
  • Scope: U
  • Confidentiality: L
  • Integrity: N
  • Availability: N

Temporal

  • Exploit code madurity: X
  • Remediation level: X
  • Report confidence: X

Result

  • Vector string: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N/E:X/RL:X/RC:X
  • Score:
    • Base: 5.3
    • Temporal: 5.3
  • Severity:
    • Base: Medium
    • Temporal: Medium

Code Examples

Compliant code

The application handles connections without storing parameters in source code

const request = require('request');
const prepareView: function(req, res) {
getAccessToken().then(function(accessToken) {
getEmbedToken(accessToken, req.params.groupId, req.params.dashboardId).then(function(embedToken) {
res.render('index', {
dashboardId: req.params.dashboardId,
embedToken,
embedUrl: POWERBI_URL + req.params.dashboardId + '&groupId=' + req.params.groupId
});
});
});
}

Non compliant code

There are Power BI credentials stored in the source code

const request = require('request');
const getAccessToken = function () {
return new Promise(function (resolve, reject) {
const url = POWERBI_URL;
const username = 'myUserName';
const password = 'myPassword';
const clientId = 'myClientId';

//Remaining code to handle connection to Token
}
};

Requirements