|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Description: Fix symlink directory traversal.
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Do not allow symlinks that traverse the current directoru, nor absolute
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
symlinks.
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
.
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Fixes CVE-2015-0556.
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Author: Guillem Jover <guillem@debian.org>
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Origin: vendor
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Bug-Debian: https://bugs.debian.org/774434
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Forwarded: no
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
Last-Update: 2015-03-28
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
---
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
uxspec.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
1 file changed, 54 insertions(+)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
--- a/uxspec.c
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+++ b/uxspec.c
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
@@ -120,6 +120,58 @@ int query_uxspecial(char FAR **dest, cha
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
}
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+#if TARGET==UNIX
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+static int is_link_traversal(const char *name)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ enum {
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ STATE_NONE,
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ STATE_DOTS,
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ STATE_NAME,
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ } state = STATE_NONE;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ int ndir = 0;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ int dots = 0;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ while(*name) {
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ int c = *name++;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (c == '/')
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if ((state == STATE_DOTS) && (dots == 2))
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ ndir--;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (ndir < 0)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if ((state == STATE_DOTS && dots == 1) && ndir == 0)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (state == STATE_NONE && ndir == 0)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ return 1;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if ((state == STATE_DOTS) && (dots > 2))
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ ndir++;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ state = STATE_NONE;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ dots = 0;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ else if (c == '.')
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (state == STATE_NONE)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ state = STATE_DOTS;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ dots++;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ else
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (state == STATE_NONE)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ ndir++;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ state = STATE_NAME;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if ((state == STATE_DOTS) && (dots == 2))
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ ndir--;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if ((state == STATE_DOTS) && (dots > 2))
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ ndir++;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ return ndir < 0;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
/* Restores the UNIX special file data */
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
int set_uxspecial(char FAR *storage, char *name)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
@@ -156,6 +208,8 @@ int set_uxspecial(char FAR *storage, cha
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
l=sizeof(tmp_name)-1;
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
far_memmove((char FAR *)tmp_name, dptr, l);
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
tmp_name[l]='\0';
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ if (is_link_traversal(tmp_name))
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
+ return(UXSPEC_RC_ERROR);
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
rc=(id==UXSB_HLNK)?link(tmp_name, name):symlink(tmp_name, name);
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
if(!rc)
|
|
![](https://seccdn.libravatar.org/avatar/ea064b89e87b1895a84759a4950a139e0016ae503bf0eb4304a2a809343a9d75?s=16&d=retro) |
097f276 |
return(0);
|