Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Store credentials only in session if required #11747

Merged
merged 2 commits into from
Dec 1, 2014

Conversation

LukasReschke
Copy link
Member

$mountpoints = \OC_Mount_Config::getAbsoluteMountPoints($params['uid']);
$mountpointClasses = array();
foreach($mountpoints as $mountpoint) {
$mountpointClasses[$mountpoint['class']] = '';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could set it to true.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point - will change.

@LukasReschke
Copy link
Member Author

Let's schedule this for 7.0.4 - seems like a too big change for me to merge it right away so shortly before a release.

This PR is there to store the user credentials only in the session (and therefore unprotected on the disk) in case the SMB_OC storage is used. Furthermore, the credentials are now stored encrypted instead of being plain text.

While this PR seems big it's mostly the backport of the \OC\Security\Crypto class which we already have in master and is very useful to encrypt things with a global key. I believe it's better to backport this class instead of adding yet another encryption function just for this sake.

The actual change regarding the storage is not that big: 30e39ab

@karlitschek Would that be ok for you?

@karlitschek
Copy link
Contributor

@LukasReschke agreed

@LukasReschke LukasReschke force-pushed the storeCredentialsOnlyInSessionIfRequired branch from 86e9d3c to 1835b4d Compare November 17, 2014 11:57
@LukasReschke LukasReschke changed the title WIP: Store credentials only in session if required Store credentials only in session if required Nov 17, 2014
@LukasReschke
Copy link
Member Author

@icewind1991 Could you review this please? - Thank you!
(Will have to be ported to master once merged)

return hash_equals($expected, $input);
}

$randomString = \OC_Util::generateRandomBytes(10);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the public api for random strings here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's for stable7 where the interface not exists. - Master will have this changed. I don't think it makes a difference if we use the non-public API here for that. - It's doomed to die anyways.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, didn't notice this was against stable7

@icewind1991
Copy link
Contributor

Code looks good 👍

@LukasReschke LukasReschke force-pushed the storeCredentialsOnlyInSessionIfRequired branch from 1835b4d to 539d7ce Compare November 20, 2014 15:03
@LukasReschke
Copy link
Member Author

@MorrisJobke Care to review this? - The backport of #11947 depends on this one.

@LukasReschke LukasReschke force-pushed the storeCredentialsOnlyInSessionIfRequired branch from 539d7ce to 74b68e1 Compare November 20, 2014 15:05
@scrutinizer-notifier
Copy link

The inspection completed: 7 new issues, 26 updated code elements

@cedric-dufour
Copy link

(coming from #11939)
Just a thought: why not allow/use the PHP session ID and the configured secret when encrypting session data? If I'm correct, the session ID is stored nowhere on disk (session files using the hashed session ID as their name). This would make much more difficult to uncover the encrypted session data, no?

@LukasReschke
Copy link
Member Author

That's even more snake-oil. Let's not overcomplicate things. Especially because we regenerate the session a few times, then everything would be broken again = bad :-)

@LukasReschke
Copy link
Member Author

(Especially because we're going to store it in mount.json anyways as is documented on the linked issue)

@LukasReschke
Copy link
Member Author

See #12216

@PVince81
Copy link
Contributor

@Xenopathic what do you think ?

@RobinMcCorkell
Copy link
Member

I like the crypto element, it certainly makes it a bit better than storing the password raw in the session! 👍 from me

@ghost
Copy link

ghost commented Nov 26, 2014

🚀 Test PASSed. 🚀
Refer to this link for build results (access rights to CI server needed):
https://ci.owncloud.org//job/pull-request-analyser-ng-simple/3331/
🚀 Test PASSed. 🚀

@PVince81
Copy link
Contributor

Tagging as 7.0 since the backport was approved.

@PVince81
Copy link
Contributor

Steps to test:

  1. Create a user "user1" whose username/password is the same as some SMB storage
  2. Mount that SMB external storage as system mount with type "SMB using OC login" (ignore the red box because the "root" user doesn't have an SMB account)
  3. Login as "user1"
  4. See that there is a SMB mount point and that files can be uploaded/downloaded

That's it. Worked for me. 👍

I'd like to wait for @jnfrmarks' feedback before merging this, to make sure there is still enough time to test this.

@LukasReschke
Copy link
Member Author

@jnfrmarks We promised this for 7.0.4 to somebody. Can you please test this?

@PVince81
Copy link
Contributor

PVince81 commented Dec 1, 2014

Let's merge it then, already got three thumbs up and backport approval.

PVince81 pushed a commit that referenced this pull request Dec 1, 2014
…IfRequired

Store credentials only in session if required
@PVince81 PVince81 merged commit 3917383 into stable7 Dec 1, 2014
@PVince81 PVince81 deleted the storeCredentialsOnlyInSessionIfRequired branch December 1, 2014 10:07
@LukasReschke
Copy link
Member Author

Will port to master.

@LukasReschke
Copy link
Member Author

Master: #12523

@jnfrmarks
Copy link

@PVince81 @LukasReschke

I don't understand what the bug is. I ran through the steps listed earlier on how to reproduce the issue but I don't know what the issue is :) I was able to successfully create the smb mount and navigate through the files using 7.0.3.

@LukasReschke
Copy link
Member Author

@jnfrmarks You need to look at the PHP session files (depends on the OS where located) when logged-in with and without the patch.

But if everything works as before this means that this patch works fine - no visible changes to the user :)

@jnfrmarks
Copy link

@LukasReschke

So far, I have only tested this with 7.0.3 - I'm trying to reproduce the original issue. Where do I look for the php session files? My server is on either CentOS or Ubuntu (I'm testing with both)

@LukasReschke
Copy link
Member Author

So far, I have only tested this with 7.0.3 - I'm trying to reproduce the original issue. Where do I look for the php session files? My server is on either CentOS or Ubuntu (I'm testing with both)

Depends on your operating system Ubuntu is AFAIK /var/lib/php5 and CentOS is /var/lib/php/session. I might be wrong though :-)

@lock lock bot locked as resolved and limited conversation to collaborators Aug 15, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants