Skip to content

Commit a47adae

Browse files
committed
MAGETWO-71119: Failure to check admin permissions leads to information disclosure
1 parent cd151d5 commit a47adae

File tree

2 files changed

+98
-2
lines changed

2 files changed

+98
-2
lines changed

app/code/Magento/Ui/Controller/Adminhtml/Export/GridToCsv.php

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Magento\Backend\App\Action\Context;
1010
use Magento\Ui\Model\Export\ConvertToCsv;
1111
use Magento\Framework\App\Response\Http\FileFactory;
12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Ui\Component\MassAction\Filter;
14+
use Psr\Log\LoggerInterface;
1215

1316
/**
1417
* Class Render
@@ -25,19 +28,35 @@ class GridToCsv extends Action
2528
*/
2629
protected $fileFactory;
2730

31+
/**
32+
* @var Filter
33+
*/
34+
private $filter;
35+
36+
/**
37+
* @var LoggerInterface
38+
*/
39+
private $logger;
40+
2841
/**
2942
* @param Context $context
3043
* @param ConvertToCsv $converter
3144
* @param FileFactory $fileFactory
45+
* @param Filter|null $filter
46+
* @param LoggerInterface|null $logger
3247
*/
3348
public function __construct(
3449
Context $context,
3550
ConvertToCsv $converter,
36-
FileFactory $fileFactory
51+
FileFactory $fileFactory,
52+
Filter $filter = null,
53+
LoggerInterface $logger = null
3754
) {
3855
parent::__construct($context);
3956
$this->converter = $converter;
4057
$this->fileFactory = $fileFactory;
58+
$this->filter = $filter ?: ObjectManager::getInstance()->get(Filter::class);
59+
$this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
4160
}
4261

4362
/**
@@ -50,4 +69,33 @@ public function execute()
5069
{
5170
return $this->fileFactory->create('export.csv', $this->converter->getCsvFile(), 'var');
5271
}
72+
73+
/**
74+
* Checking if the user has access to requested component.
75+
*
76+
* @inheritDoc
77+
*/
78+
protected function _isAllowed()
79+
{
80+
if ($this->_request->getParam('namespace')) {
81+
try {
82+
$component = $this->filter->getComponent();
83+
$dataProviderConfig = $component->getContext()
84+
->getDataProvider()
85+
->getConfigData();
86+
if (isset($dataProviderConfig['aclResource'])) {
87+
88+
return $this->_authorization->isAllowed(
89+
$dataProviderConfig['aclResource']
90+
);
91+
}
92+
} catch (\Throwable $exception) {
93+
$this->logger->critical($exception);
94+
95+
return false;
96+
}
97+
}
98+
99+
return true;
100+
}
53101
}

app/code/Magento/Ui/Controller/Adminhtml/Export/GridToXml.php

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Magento\Backend\App\Action\Context;
1010
use Magento\Ui\Model\Export\ConvertToXml;
1111
use Magento\Framework\App\Response\Http\FileFactory;
12+
use Magento\Framework\App\ObjectManager;
13+
use Magento\Ui\Component\MassAction\Filter;
14+
use Psr\Log\LoggerInterface;
1215

1316
/**
1417
* Class Render
@@ -25,19 +28,35 @@ class GridToXml extends Action
2528
*/
2629
protected $fileFactory;
2730

31+
/**
32+
* @var Filter
33+
*/
34+
private $filter;
35+
36+
/**
37+
* @var LoggerInterface
38+
*/
39+
private $logger;
40+
2841
/**
2942
* @param Context $context
3043
* @param ConvertToXml $converter
3144
* @param FileFactory $fileFactory
45+
* @param Filter|null $filter
46+
* @param LoggerInterface|null $logger
3247
*/
3348
public function __construct(
3449
Context $context,
3550
ConvertToXml $converter,
36-
FileFactory $fileFactory
51+
FileFactory $fileFactory,
52+
Filter $filter = null,
53+
LoggerInterface $logger = null
3754
) {
3855
parent::__construct($context);
3956
$this->converter = $converter;
4057
$this->fileFactory = $fileFactory;
58+
$this->filter = $filter ?: ObjectManager::getInstance()->get(Filter::class);
59+
$this->logger = $logger ?: ObjectManager::getInstance()->get(LoggerInterface::class);
4160
}
4261

4362
/**
@@ -50,4 +69,33 @@ public function execute()
5069
{
5170
return $this->fileFactory->create('export.xml', $this->converter->getXmlFile(), 'var');
5271
}
72+
73+
/**
74+
* Checking if the user has access to requested component.
75+
*
76+
* @inheritDoc
77+
*/
78+
protected function _isAllowed()
79+
{
80+
if ($this->_request->getParam('namespace')) {
81+
try {
82+
$component = $this->filter->getComponent();
83+
$dataProviderConfig = $component->getContext()
84+
->getDataProvider()
85+
->getConfigData();
86+
if (isset($dataProviderConfig['aclResource'])) {
87+
88+
return $this->_authorization->isAllowed(
89+
$dataProviderConfig['aclResource']
90+
);
91+
}
92+
} catch (\Throwable $exception) {
93+
$this->logger->critical($exception);
94+
95+
return false;
96+
}
97+
}
98+
99+
return true;
100+
}
53101
}

0 commit comments

Comments
 (0)