[RFR] 8205525 : Improve exception messages during manifest parsing of jar archives
Weijun Wang
weijun.wang at oracle.com
Mon Sep 10 14:31:25 UTC 2018
> On Sep 10, 2018, at 9:59 PM, Baesken, Matthias <matthias.baesken at sap.com> wrote:
>
> New webrev :
>
> http://cr.openjdk.java.net/~mbaesken/webrevs/8205525.9/
Looks fine to me.
>
> - SocketExceptions class has been adjusted to new sun.security.util.SecurityProperties
> - Attributes getErrorPosition adjusted (see proposal of Christoph " I think it would be enough to drop the privileged section and just return "filename" as is.)
>
> After the changes I wonder - should the jarPath category be renamed to jarFile (or something else) ?
jarFile seems to be an instance of JarFile. I don't think jarPath has any problem.
Thanks
Max
>
>
> Best regards, Matthias
>
>> -----Original Message-----
>> From: Langer, Christoph
>> Sent: Montag, 10. September 2018 10:04
>> To: Baesken, Matthias <matthias.baesken at sap.com>; Wang Weijun
>> <weijun.wang at oracle.com>; Sean Mullan <sean.mullan at oracle.com>
>> Cc: security-dev at openjdk.java.net; core-libs-dev at openjdk.java.net
>> Subject: RE: [RFR] 8205525 : Improve exception messages during manifest
>> parsing of jar archives
>>
>> Hi Matthias,
>>
>> I think it would be enough to drop the privileged section and just return
>> "filename" as is. (without conveting to a file object).
>>
>> I also agree with Sean that the common parts of the new
>> src/java.base/share/classes/sun/security/util/SecurityProperties.java should
>> be aligned with
>> src/java.base/share/classes/sun/net/util/SocketExceptions.java (That is,
>> SocketExceptions calling SecurityProperties)
>>
>> Best regards
>> Christoph
>>
>>
>>> -----Original Message-----
>>> From: core-libs-dev <core-libs-dev-bounces at openjdk.java.net> On Behalf
>>> Of Baesken, Matthias
>>> Sent: Montag, 10. September 2018 09:53
>>> To: Wang Weijun <weijun.wang at oracle.com>; Sean Mullan
>>> <sean.mullan at oracle.com>
>>> Cc: security-dev at openjdk.java.net; core-libs-dev at openjdk.java.net
>>> Subject: [CAUTION] RE: [RFR] 8205525 : Improve exception messages
>> during
>>> manifest parsing of jar archives
>>>
>>> Hello are you fine with changing from file.getAbsolutePath() to
>>> file.getName() ?
>>>
>>>
>>>
>> http://cr.openjdk.java.net/~mbaesken/webrevs/8205525.8/src/java.base/s
>>> hare/classes/java/util/jar/Manifest.java.frames.html
>>>
>>>
>>> 206 static String getErrorPosition(String filename, final int lineNumber) {
>>> 207 if (filename == null || !jarPathInExceptionText) {
>>> 208 return "line " + lineNumber;
>>> 209 }
>>> 210
>>> 211 final File file = new File(filename);
>>> 212 return AccessController.doPrivileged(new
>> PrivilegedAction<String>()
>>> {
>>> 213 public String run() {
>>> 214 return "manifest of " + file.getName() + ":" + lineNumber;
>>> 215 }
>>>
>>>
>>> Best regards, Matthias
>>>
>>>
>>>> -----Original Message-----
>>>> From: Wang Weijun <weijun.wang at oracle.com>
>>>> Sent: Samstag, 8. September 2018 17:43
>>>> To: Sean Mullan <sean.mullan at oracle.com>
>>>> Cc: Baesken, Matthias <matthias.baesken at sap.com>; Alan Bateman
>>>> <Alan.Bateman at oracle.com>; Chris Hegarty
>> <chris.hegarty at oracle.com>;
>>>> security-dev at openjdk.java.net; core-libs-dev at openjdk.java.net
>>>> Subject: Re: [RFR] 8205525 : Improve exception messages during
>> manifest
>>>> parsing of jar archives
>>>>
>>>> Thinking about this again. Looks like the absolute path is not necessary.
>>> Even
>>>> if there are multiple files using the same name, they will be in different
>>>> directories, no matter absolute or relative. Suppose the jarPath info is
>> used
>>>> for debugging purpose mostly like the developer can find out what the
>>>> current working directory is and can find the files. *Matthias*: Is the
>>> absolute
>>>> path really necessary? Are you working on actual case?
>>>>
>>>> As for the possible global effect of a security property, maybe we can
>>>> emphasis that this is both a security property and system property, and if
>>> it’s
>>>> just for one time use, it’s better to use a system property.
>>>>
>>>> BTW, does the existing value “hostInfo” of the property have a similar
>>>> problem?
>>>>
>>>> Thanks
>>>> Max
>>>>
>>>>>> 在 2018年9月8日,21:42,Sean Mullan <sean.mullan at oracle.com>
>> 写
>>>> 道:
>>>>>>
>>>>>> On 9/7/18 7:58 PM, Weijun Wang wrote:
>>>>>> In my understanding, the author deliberately wants to show the
>>> absolute
>>>> paths when there are multiple jar files with the same name (Ex: a jar
>> hell).
>>>>>
>>>>> If you are very familiar with a particular application and understand the
>>> risks
>>>> associated with running it, then I agree that is ok. But security properties
>>>> apply to all applications using that JDK, and so I don't always think it is
>>>> practical for an admin to understand every type of application that may
>> be
>>>> using that JDK and whether or not enabling this property presents a risk.
>>>>>
>>>>>> Maybe we can add some more detail in the java.security so an admin
>>>> knows what exact impact it has.
>>>>>
>>>>> It would be a slippery slope in my opinion. You would have to say
>>>> something like: "enabling this property may allow untrusted code running
>>>> under a SecurityManager to access sensitive information such as the
>>>> user.home system property even if it has not been granted permission to
>>> do
>>>> so."
>>>>>
>>>>> I think we should consider not allowing this property to take effect if a
>>>> SecurityManager is running.
>>>>>
>>>>> --Sean
>>>>>
>>>>>> --Max
>>>>>>> On Sep 8, 2018, at 3:41 AM, Sean Mullan <sean.mullan at oracle.com>
>>>> wrote:
>>>>>>>
>>>>>>> On 8/29/18 10:01 AM, Baesken, Matthias wrote:
>>>>>>>> Hi Max, thanks for your input .
>>>>>>>> I created another webrev , this contains now the suggested
>>>> SecurityProperties class :
>>>>>>>> http://cr.openjdk.java.net/~mbaesken/webrevs/8205525.6/
>>>>>>>
>>>>>>> java/util/jar/Attributes.java
>>>>>>>
>>>>>>> 469 return AccessController.doPrivileged(new
>>>> PrivilegedAction<String>() {
>>>>>>> 470 public String run() {
>>>>>>> 471 return file.getAbsolutePath() + ":" + lineNumber;
>>>>>>> 472 }
>>>>>>> 473 });
>>>>>>>
>>>>>>> I have a serious concern with the code above.
>>>>>>>
>>>>>>> With this change, untrusted code running under a SecurityManager
>>>> could potentially create a JarFile on a non-absolute path ex: "foo.jar", and
>>>> (somehow) cause an IOException to be thrown which would then reveal
>>> the
>>>> absolute path of where the jar was located, and thus could reveal
>> sensitive
>>>> details about the system (ex: the user's home directory). It could still be
>>> hard
>>>> to exploit, since it would have to be a known jar that exists, and you
>> would
>>>> then need to cause an IOException to be thrown, but it's still theoretically
>>>> possible.
>>>>>>>
>>>>>>> In short, this is a more general issue in that it may allow untrusted
>> code
>>>> to access something it couldn't have previously. new
>>>> JarFile("foo.jar").getName() returns "foo.jar", and not the absolute path.
>>>>>>>
>>>>>>> Granted this can only be done if the security property is enabled, but
>> I
>>>> believe this is not something administrators should have to know about
>>> their
>>>> environment and account for when enabling this property.
>>>>>>>
>>>>>>> The above code should be changed to return only what the caller
>>>> provides to JarFile, which is the name of the file (without the full path).
>>>>>>>
>>>>>>> --Sean
>>
>
More information about the security-dev
mailing list