Hi,

In the case of supplying a filter to getObject the caller is intentionally replacing
the system filter and can supply a filter that  performs it own checks and
if desired can delegate to the system filter.
Some thought does need to be designed into the filter supplied as to
its purpose and edge cases.

Thanks, Roger


On 8/23/18 12:19 PM, Weijun Wang wrote:
But calling getObject(filter) effectively overrides the system filter, is that 
a problem?

On Aug 23, 2018, at 11:51 PM, Roger Riggs <roger.ri...@oracle.com> wrote:

Hi Max,

Yes, the stream is passed to the readObject method of the classes being 
deserialized.

But that's only a concern during the call to a.readObject() not on the call to 
setObjectInputFilter.

It would be reasonable I think for getObject0 to put a doPriv around the call 
to a.setObjectInputFilter(filter).
Then it would not be necessary to document the security exception nor need for 
a permission
and making it easier to understand.  The Signed/Sealed object should be free to 
set the filter regardless
of the current SM.

Roger


On 8/23/18 11:14 AM, Weijun Wang wrote:
You mean during deserialization an untrusted object could be created that have 
a reference to the stream itself?

On Aug 23, 2018, at 10:12 PM, Roger Riggs <roger.ri...@oracle.com> wrote:

Hi,

The original basis for the security manager check was to ensure that the filter 
could
not be replaced by untrusted code including code in the classes being 
deserialized
that have access to the ObjectInputStream.

Regards, Roger

On 8/23/18 10:00 AM, Weijun Wang wrote:
This follows the convention of ObjectInputStream::setObjectInputFilter. IMHO, 
in that case the caller also creates the filter and it's only set on this input 
stream.

Maybe we shouldn't have added the permission check there?

Thanks
Max

On Aug 23, 2018, at 4:55 AM, Sean Mullan <sean.mul...@oracle.com> wrote:

One thing I am curious about. Is there a reason why 
getObject(ObjectInputFilter) requires a permission check?

In this case, the caller is the one creating the filter and passing it in, so 
the caller can only cause harm to themselves, and the ObjectInputStream is a 
local variable which is not returned. This method also does not mutate the 
contents of the SignedObject (or SealedObject) ... so I don't see the risk 
here. I think you can just wrap ObjectInputStream.setObjectInputFilter in 
doPrivileged.

--Sean

Reply via email to