[ 
https://issues.apache.org/jira/browse/DERBY-2925?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rick Hillegas updated DERBY-2925:
---------------------------------

    Attachment: derby-2925-07-aa-fileUrl.diff

Attaching derby-2925-07-aa-fileUrl.diff. This patch prevents users from 
subverting the file existence check by phrasing the filename as an url. The 
tests passed cleanly for me.

The export procedure uses the user-supplied export file name twice:

1) To check whether the file exists

2) To open the file so that export can dump a table into the file

For the second use, Derby checks to see whether the user-supplied name is 
actually an url rather than a plain file name. If the user-supplied name is an 
url, Derby transforms it into a plain file name. This transformation is not 
performed when checking for the file's existence. As a result, it is still 
possible to use export to overwrite an existing file by prefixing the file name 
with the string "file:". This will be an illegal file name for the purposes of 
(1) and therefore not abort the export before step (2).

This patch simply performs the same transformation in steps (1) and (2).

Touches the following files:

------------

M      java/engine/org/apache/derby/iapi/services/io/FileUtil.java
M      java/engine/org/apache/derby/impl/load/Export.java
M      java/engine/org/apache/derby/impl/load/ExportWriteData.java

Factor out the file name transformation into FileUtil so that it can be used by 
both steps (1) and (2).

------------

M      java/engine/org/apache/derby/impl/io/CPFile.java

Removed an unneeded import.

------------

M      
java/testing/org/apache/derbyTesting/functionTests/tests/tools/ImportExportBinaryDataTest.java

Added a test case for this scenario.


> Prevent export from overwriting existing files
> ----------------------------------------------
>
>                 Key: DERBY-2925
>                 URL: https://issues.apache.org/jira/browse/DERBY-2925
>             Project: Derby
>          Issue Type: Sub-task
>          Components: Tools
>    Affects Versions: 10.1.2.1, 10.2.2.0, 10.3.1.4, 10.4.1.3
>            Reporter: Kathey Marsden
>            Assignee: Ramin Moazeni
>             Fix For: 10.3.1.4, 10.4.1.3
>
>         Attachments: derby-2925-07-aa-fileUrl.diff, DERBY-2925v0.diff, 
> DERBY-2925v0.stat, DERBY-2925v1.diff, DERBY-2925v1.stat, DERBY-2925v2.diff, 
> DERBY-2925v2.stat, DERBY-2925v3.diff, DERBY-2925v3.stat, DERBY-2925v4.diff, 
> DERBY-2925v4.stat, DERBY-2925v5.diff, DERBY-2925v5.stat, DERBY-2925v6.diff, 
> DERBY-2925v6.stat, releaseNote.html, releaseNotev0.html
>
>
> Export should not overwrite existing files, but rather insist that the user 
> remove them before writing to the file.  This will help prevent accidental or 
> intentional corruption of the database with export.  This may introduce a 
> compatibility issue with export but because export is usually an attended 
> utility and not typically invoked as part of an application, I think the risk 
> is worth the additional security this will provide.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to