You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by "Peter Bacsko (JIRA)" <ji...@apache.org> on 2016/06/15 16:29:09 UTC

[jira] [Comment Edited] (OOZIE-2362) SQL injection in BulkJPAExecutor

    [ https://issues.apache.org/jira/browse/OOZIE-2362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15331966#comment-15331966 ] 

Peter Bacsko edited comment on OOZIE-2362 at 6/15/16 4:28 PM:
--------------------------------------------------------------

Examples:

{code}
*** Action query: SELECT a.id, a.actionNumber, a.errorCode, a.errorMessage, a.externalId, a.externalStatus, a.statusStr, a.createdTimestamp, a.nominalTimestamp, a.missingDependencies, c.id, c.appName, c.statusStr FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id AND c.bundleId = :bundleId AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN ('FAILED','KILLED')  ORDER BY a.jobId, a.createdTimestamp
*** Count query: SELECT COUNT(a) FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id  AND c.bundleId IN ('0000000-160615161217850-oozie-pbac-B')  AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN ('FAILED','KILLED')  
{code}

vs

{code}
*** Action query: SELECT a.id, a.actionNumber, a.errorCode, a.errorMessage, a.externalId, a.externalStatus, a.statusStr, a.createdTimestamp, a.nominalTimestamp, a.missingDependencies, c.id, c.appName, c.statusStr FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id AND c.bundleId = :bundleId AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN (:status0, :status1)  ORDER BY a.jobId, a.createdTimestamp
*** count query: SELECT COUNT(a) FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id  AND c.bundleId IN (:count0)  AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN (:status0, :status1)  
Param set - count0: 0000000-160615160302963-oozie-pbac-B
Param set - status0: FAILED
Param set - status1: KILLED
{code}


was (Author: pbacsko):
Examples:

{code}
*** Action query: SELECT a.id, a.actionNumber, a.errorCode, a.errorMessage, a.externalId, a.externalStatus, a.statusStr, a.createdTimestamp, a.nominalTimestamp, a.missingDependencies, c.id, c.appName, c.statusStr FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id AND c.bundleId = :bundleId AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN ('FAILED','KILLED')  ORDER BY a.jobId, a.createdTimestamp
*** Count query: SELECT COUNT(a) FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id  AND c.bundleId IN ('0000000-160615161217850-oozie-pbac-B')  AND a.nominalTimestamp <= :endNominal AND a.nominalTimestamp >= :startNominal AND a.createdTimestamp <= :endCreated AND a.createdTimestamp >= :startCreated AND a.statusStr IN ('FAILED','KILLED')  
{code}

vs

{code}
*** Action query: SELECT a.id, a.actionNumber, a.errorCode, a.errorMessage, a.externalId, a.externalStatus, a.statusStr, a.createdTimestamp, a.nominalTimestamp, a.missingDependencies, c.id, c.appName, c.statusStr FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id AND c.bundleId = :bundleId AND c.appName IN (:param0, :param1)  AND a.statusStr IN (:status0)  ORDER BY a.jobId, a.createdTimestamp
*** count query: SELECT COUNT(a) FROM CoordinatorActionBean a, CoordinatorJobBean c WHERE a.jobId = c.id  AND c.bundleId IN (:count0)  AND c.appName IN (:param0, :param1)  AND a.statusStr IN (:status0)  
Param set - count0: 0000000-160615160306739-oozie-pbac-B
Param set - status0: KILLED
Param set - param0: Coord1
Param set - param1: Coord2
{code}

> SQL injection in BulkJPAExecutor
> --------------------------------
>
>                 Key: OOZIE-2362
>                 URL: https://issues.apache.org/jira/browse/OOZIE-2362
>             Project: Oozie
>          Issue Type: Bug
>          Components: core, security
>    Affects Versions: 4.2.0
>            Reporter: thierry accart
>            Assignee: Peter Bacsko
>            Priority: Critical
>              Labels: patch
>             Fix For: trunk
>
>         Attachments: 0001-OOZIE-2362-SQL-injection-in-BulkJPAExecutor.patch, OOZIE-2362-001.patch
>
>
> In method inClause of org.apache.oozie.executor.jpa.BulkJPAExecutor there is a poosibility for SQL injection (https://www.owasp.org/index.php/SQL_injection) : there is no validation of content of string name before it's included in sql script, opening a possibility for a malicious user to inject sql commands.
> A simple validation of strings using .matches(...) would fix problem.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)