Bugfix: reject dubious paths in HTTP repos.

This avoids a malicious repository writing to files outside the local
storage root.
(cherry picked from commit a2b111bb09)
This commit is contained in:
James Turner
2016-12-22 16:59:45 +01:00
committed by Florent Rougon
parent c92a953511
commit 279b2c120f
+8
View File
@@ -612,6 +612,14 @@ private:
SG_LOG(SG_TERRASYNC, SG_WARN, "malformed .dirindex file: invalid type in line '" << line << "', expected 'd' or 'f', (ignoring line)" );
continue;
}
// security: prevent writing outside the repository via ../../.. filenames
// (valid filenames never contain / - subdirectories have their own .dirindex)
if ((tokens[1] == "..") || (tokens[1].find_first_of("/\\") != std::string::npos)) {
SG_LOG(SG_TERRASYNC, SG_WARN, "malformed .dirindex file: invalid filename in line '" << line << "', (ignoring line)" );
continue;
}
children.push_back(ChildInfo(typeData == "f" ? ChildInfo::FileType : ChildInfo::DirectoryType, tokens[1], tokens[2]));
if (tokens.size() > 3) {