Forgot again to write to pma-dev list
On Thu, Aug 4, 2011 at 4:17 PM, Michal Čihař <michal(a)cihar.com> wrote:
Hi
Dne Thu, 4 Aug 2011 15:47:59 +0300
Tyron Madlener <tyronx(a)gmail.com> napsal(a):
From what I can see, the token is being checked
independent of what
value PMA_MINUMUM_COMMON is set to. Looking at the other parts of
common.inc.php I also cannot see any security related functions not
being executed if PMA_MINUMUM_COMMON is set. Also defining
PMA_MINUMUM_COMMON I had added in the very first version of the file
(when it was named chart_export.php), and from what I remember you
overlooked that file there too.
And I just tested that on the gsoc-tyron demo. It returns 'Invalid
request' if no valid token is set.
Apart from that, please elaborate, how can an attacker do harm to a
user with my changes? And how is the user protected with
PMA_MINUMUM_COMMON removed? Looking at common.inc.php, I fail to find
any possible attack vector.
Defining PMA_MINUMUM_COMMON skips MySQL authentication, so it might be
easier to exploit any possible issue, but you seem to be right that
token is checked.
Do you have an example how the skipping of the MySQL authentication
could be abused?
My added file echo for the monitor config forces
the file name
'monitor.cfg', so even if the token is not checked, and an attacker is
be able to trick a user to download a file no harm can be made, since
.cfg Files are not executable or viewable by standard programs.
This one looks pretty safe.
And the import-echo I added uses $_FILES which
can only be set with an
actual file upload. I wouldn't know how that could be exploited by an
attacker.
This one definitely allows XSS (though still protected by token, so
pretty harmless unless there is some other issue).
The only way I could see how this can be used for an XSS attack
(whether protected by token or not) is when the user himself uploads a
malicious chart config file.
We could counteract this by adding a notice "Do not use chart config
files from untrusted sources!" at the chart config import dialog.
And/Or I verify if the file really is pure json on the server side,
before echoing it back. I guess doing 'echo
json_encode(json_decode(file_get_contents(...)))' should do the trick.
[Edit:] Actually verify the json wont help. One could still hide html
code within a string.
Is the echo service for HTML really needed?
It is used for the chart config import part of the monitor. There you
can upload a config file, which is within an iframe. Once submitted
and echo'd back my js code reads the config and applies it to the
monitor.
It might be possible to read local files with a HTML5 feature, or
maybe flash, but certainly will not work in all cases.