Skip to content

Commit 93aa6f7

Browse files
committed
Fixed vulnerabilities
1 parent 217216a commit 93aa6f7

File tree

5 files changed

+34
-43
lines changed

5 files changed

+34
-43
lines changed

logicaldoc-core/src/main/java/com/logicaldoc/core/store/AbstractStore.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,9 @@ public String getResourceName(Document doc, String fileVersion, String suffix) {
254254
/*
255255
* All versions of a document are stored in the same directory as the
256256
* current version, but the filename is the version number without
257-
* extension, e.g. "docId/2.1"
257+
* extension, e.g. "doc/2.1"
258258
*/
259-
String filename;
259+
String resourceName;
260260
if (doc.getDocRef() != null) {
261261
// The shortcut document doesn't have the 'fileversion' and the
262262
// 'version'
@@ -268,20 +268,20 @@ public String getResourceName(Document doc, String fileVersion, String suffix) {
268268
}
269269

270270
if (StringUtils.isEmpty(fileVersion))
271-
filename = document.getFileVersion();
271+
resourceName = document.getFileVersion();
272272
else
273-
filename = fileVersion;
274-
if (StringUtils.isEmpty(filename))
275-
filename = document.getVersion();
273+
resourceName = fileVersion;
274+
if (StringUtils.isEmpty(resourceName))
275+
resourceName = document.getVersion();
276276

277277
/*
278278
* Document's related resources are stored with a suffix, e.g.
279279
* "doc/2.1-thumb.png"
280280
*/
281281
if (StringUtils.isNotEmpty(suffix))
282-
filename += "-" + suffix;
282+
resourceName += "-" + suffix;
283283

284-
return filename;
284+
return sanitizeResourceName(resourceName);
285285
}
286286

287287
@Override
@@ -296,6 +296,10 @@ public String getResourceName(long docId, String fileVersion, String suffix) {
296296
}
297297
}
298298

299+
protected String sanitizeResourceName(String resourceName) {
300+
return resourceName.replace("..", "").replace("/", "").replace("\\", "");
301+
}
302+
299303
@Override
300304
public Map<String, String> getParameters() {
301305
return parameters;

logicaldoc-core/src/main/java/com/logicaldoc/core/store/FSStore.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ public void store(File file, long docId, String resource) throws IOException {
8282

8383
File dir = getContainer(docId);
8484
FileUtils.forceMkdir(dir);
85-
File dest = new File(new StringBuilder(dir.getPath()).append("/").append(resource).toString());
85+
File dest = new File(
86+
new StringBuilder(dir.getPath()).append("/").append(sanitizeResourceName(resource)).toString());
8687
FileUtil.copyFile(file, dest);
8788

8889
checkWriteAfterStore(docId, resource, file.length());
@@ -97,7 +98,7 @@ public void store(InputStream stream, long docId, String resource) throws IOExce
9798

9899
File dir = getContainer(docId);
99100
FileUtils.forceMkdir(dir);
100-
file = new File(new StringBuilder(dir.getPath()).append("/").append(resource).toString());
101+
file = new File(new StringBuilder(dir.getPath()).append("/").append(sanitizeResourceName(resource)).toString());
101102
FileUtil.writeFile(stream, file.getPath());
102103
} catch (IOException e) {
103104
throw e;
@@ -111,14 +112,14 @@ public void store(InputStream stream, long docId, String resource) throws IOExce
111112
@Override
112113
public void writeToFile(long docId, String resource, File out) throws IOException {
113114
File container = getContainer(docId);
114-
File file = new File(container, resource);
115+
File file = new File(container, sanitizeResourceName(resource));
115116
FileUtil.copyFile(file, out);
116117
}
117118

118119
@Override
119120
public InputStream getStream(long docId, String resource) throws IOException {
120121
File container = getContainer(docId);
121-
File file = new File(container, resource);
122+
File file = new File(container, sanitizeResourceName(resource));
122123

123124
try {
124125
return new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
@@ -142,7 +143,7 @@ public long getTotalSize() {
142143
@Override
143144
public byte[] getBytes(long docId, String resource, long start, long length) throws IOException {
144145
File container = getContainer(docId);
145-
File file = new File(container, resource);
146+
File file = new File(container, sanitizeResourceName(resource));
146147
return FileUtil.toByteArray(file, start, length);
147148
}
148149

@@ -168,14 +169,14 @@ else if (StringUtils.isNotEmpty(fileVersion)) {
168169
@Override
169170
public long size(long docId, String resource) {
170171
File file = getContainer(docId);
171-
file = new File(file, resource);
172+
file = new File(file, sanitizeResourceName(resource));
172173
return file.length();
173174
}
174175

175176
@Override
176177
public boolean exists(long docId, String resource) {
177178
File file = getContainer(docId);
178-
file = new File(file, resource);
179+
file = new File(file, sanitizeResourceName(resource));
179180
return file.exists();
180181
}
181182

logicaldoc-core/src/test/java/com/logicaldoc/core/CoreWorkbench.java

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,11 @@ public class CoreWorkbench {
4444
* @throws IOException
4545
*/
4646
public static void main(String[] args) throws IOException {
47-
String expression = """
48-
#set( $javalang = "java.lang" )
49-
#set( $runtime = "Runtime" )
50-
#set( $full = "$javalang.$runtime" )
51-
$context.getClass().forName($full)
52-
.
53-
getRuntime() .exec("/bin/bash -c id${IFS}>/tmp/rce");
54-
$context.getClass().forName("poll)o"
55-
).golla().exec("/bin/bash -c id${IFS}>/tmp/rce");
56-
$context.getClass().forName('poll)o').ciao();
57-
58-
$context.getClass().forName($full).sdsd.exec("sdfrt");
59-
$log.info("done");
60-
""";
61-
62-
Pattern runtimePattern = Pattern.compile("\\.\\s*(getRuntime|runtime)", Pattern.DOTALL);
63-
Matcher m = runtimePattern.matcher(expression);
64-
while (m.find()) {
65-
System.out.println("\nSuspicious instruction: " + m.group());
66-
67-
final String snippet = expression.substring(Math.max(0, m.start() - 50),
68-
Math.min(expression.length() - 1, m.end() + 50));
69-
System.out.println("\n" + snippet);
70-
}
71-
47+
String expression = "1.0-conversion-pdf";
48+
System.out.println(expression.replace("..", "").replace("/", "").replace("\\", "") );
49+
50+
51+
7252
// OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
7353
// // What % CPU load this current JVM is taking, from 0.0-1.0
7454
// System.out.println(osBean.getProcessCpuLoad());

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/folder/ContextMenu.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,10 @@ public void onFailure(Throwable caught) {
138138
@Override
139139
public void onSuccess(GUIFolder selectedFolder) {
140140
delete.setEnabled(!selectedFolder.isDefaultWorkspace());
141-
move.setEnabled(false);
142-
merge.setEnabled(false);
141+
move.setEnabled(!selectedFolder.isDefaultWorkspace());
143142
rename.setEnabled(!selectedFolder.isDefaultWorkspace());
144143
createWorkspace.setEnabled(Feature.enabled(Feature.MULTI_WORKSPACE));
144+
merge.setEnabled(false);
145145
}
146146
});
147147
}
@@ -321,7 +321,7 @@ private MenuItem prepareExportZipMenuItem(final GUIFolder folder) {
321321
private MenuItem prepareMoveMenuItem() {
322322
MenuItem move = new MenuItem();
323323
move.setTitle(I18N.message("move"));
324-
move.addClickHandler(event -> new MoveDialog().show());
324+
move.addClickHandler(click -> new MoveDialog().show());
325325
move.setEnabled(acl.isMove());
326326
return move;
327327
}

logicaldoc-webservice/src/main/java/com/logicaldoc/webservice/soap/client/SoapDocumentClient.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,12 @@ public void replaceFile(String sid, long docId, String fileVersion, String comme
384384
client.replaceFile(sid, docId, fileVersion, comment, content);
385385
}
386386

387+
public void replaceFile(String sid, long docId, String fileVersion, String comment, File content)
388+
throws AuthenticationException, PermissionException, WebserviceException, PersistenceException, IOException,
389+
UnexistingResourceException {
390+
client.replaceFile(sid, docId, fileVersion, comment, new DataHandler(new FileDataSource(content)));
391+
}
392+
387393
@Override
388394
public void promoteVersion(String sid, long docId, String version) throws AuthenticationException,
389395
PermissionException, WebserviceException, PersistenceException, IOException, UnexistingResourceException {

0 commit comments

Comments
 (0)