aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-07-03 15:35:58 +0200
committerJakob Unterwurzacher2016-07-03 15:35:58 +0200
commite574a6cc1f053a16158bd228cf0ec9c6b255ad09 (patch)
tree5964982fa8f93b1e24be1f8a229ff7e197501fd2 /internal
parentd5b7eb33daec612626305c961b7ec6d5eccd79a7 (diff)
nametransform: hide detailed padding error behind the debug flag
unPad16 returns detailed errors including the position of the incorrect bytes. Kill a possible padding oracle by lumping everything into a generic error. The detailed error is only logged if debug is active.
Diffstat (limited to 'internal')
-rw-r--r--internal/fusefrontend/fs_dir.go4
-rw-r--r--internal/nametransform/names.go7
2 files changed, 8 insertions, 3 deletions
diff --git a/internal/fusefrontend/fs_dir.go b/internal/fusefrontend/fs_dir.go
index 9547ce6..4657b95 100644
--- a/internal/fusefrontend/fs_dir.go
+++ b/internal/fusefrontend/fs_dir.go
@@ -265,7 +265,7 @@ func (fs *FS) OpenDir(dirName string, context *fuse.Context) ([]fuse.DirEntry, f
if isLong == nametransform.LongNameContent {
cNameLong, err := nametransform.ReadLongName(filepath.Join(cDirAbsPath, cName))
if err != nil {
- tlog.Warn.Printf("Skipping file %q in dir %q: Could not read .name: %v",
+ tlog.Warn.Printf("Skipping entry %q in dir %q: Could not read .name: %v",
cName, cDirName, err)
errorCount++
continue
@@ -278,7 +278,7 @@ func (fs *FS) OpenDir(dirName string, context *fuse.Context) ([]fuse.DirEntry, f
name, err := fs.nameTransform.DecryptName(cName, cachedIV)
if err != nil {
- tlog.Warn.Printf("Skipping invalid name %q in dir %q: %s",
+ tlog.Warn.Printf("Skipping entry %q in dir %q: %s",
cName, cDirName, err)
errorCount++
continue
diff --git a/internal/nametransform/names.go b/internal/nametransform/names.go
index 4930488..89ce0db 100644
--- a/internal/nametransform/names.go
+++ b/internal/nametransform/names.go
@@ -10,6 +10,7 @@ import (
"github.com/rfjakob/eme"
"github.com/rfjakob/gocryptfs/internal/cryptocore"
+ "github.com/rfjakob/gocryptfs/internal/tlog"
)
type NameTransform struct {
@@ -42,7 +43,11 @@ func (n *NameTransform) DecryptName(cipherName string, iv []byte) (string, error
bin = eme.Transform(n.cryptoCore.BlockCipher, iv, bin, eme.DirectionDecrypt)
bin, err = unPad16(bin)
if err != nil {
- return "", err
+ tlog.Debug.Printf("pad16 error detail: %v", err)
+ // unPad16 returns detailed errors including the position of the
+ // incorrect bytes. Kill the padding oracle by lumping everything into
+ // a generic error.
+ return "", fmt.Errorf("Invalid padding")
}
plain := string(bin)
return plain, err